Round floats using round(x), not static_cast<int>(x + 0.5)
authorBenjamin Barenblat <bbaren@google.com>
Fri, 25 Feb 2022 01:39:43 +0000 (01:39 +0000)
committerPeter Michael Green <plugwash@raspbian.org>
Fri, 25 Feb 2022 01:39:43 +0000 (01:39 +0000)
commit8e48f0596b90c9760fceacbed8d48a9eb9ab8e01
tree1c56be19239190698ceb14ed5cbaa2bed5964b17
parent91734c997e1f525209e8fa0e59aeac93cc4a4d59
Round floats using round(x), not static_cast<int>(x + 0.5)

Forwarded: yes
Applied-Upstream: https://github.com/abseil/abseil-cpp/commit/d96e287417766deddbff2d01b96321288c59491e

Adding 0.5 to an IEEE float may cause one bit of precision loss, which
is enough to change the result in certain cases. For example,

    static_cast<int>(std::round(0.49999999999999994)) == 0
    static_cast<int>(0.49999999999999994 + 0.5) == 1

The author works at Google. Upstream applied this patch as Piper
revision 369926519 and exported it to GitHub; the Applied-Upstream URL
above points to the exported commit.

Gbp-Pq: Name float-rounding.diff
absl/time/duration_test.cc
absl/time/time.h