Round floats using round(x), not static_cast<int>(x + 0.5)
authorBenjamin Barenblat <bbaren@google.com>
Mon, 7 Feb 2022 16:54:21 +0000 (16:54 +0000)
committerBenjamin Barenblat <bbaren@debian.org>
Mon, 7 Feb 2022 16:54:21 +0000 (16:54 +0000)
commit5a2f58f766448ac5558b623d0a85acd17de7c8e5
tree3d8f7522602a8b05e72acc5f8f8419ec02e92f6e
parent78b8180162ef90c9a3fd885cce462c17440c8a13
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