From 5328c9be4356cc3d7ab2e359acb1e9ebeeeea631 Mon Sep 17 00:00:00 2001 From: Niels Dekker Date: Thu, 10 Sep 2020 16:22:28 +0200 Subject: Fix half_impl::float_to_half_rtne(float) warning: '<<' causes overflow Fixed Visual Studio 2019 Code Analysis (C++ Core Guidelines) warning C26450 from inside `half_impl::float_to_half_rtne(float)`: > Arithmetic overflow: '<<' operation causes overflow at compile time. --- Eigen/src/Core/arch/Default/Half.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Eigen/src/Core/arch/Default/Half.h b/Eigen/src/Core/arch/Default/Half.h index bbc15d463..60f19749b 100644 --- a/Eigen/src/Core/arch/Default/Half.h +++ b/Eigen/src/Core/arch/Default/Half.h @@ -472,7 +472,9 @@ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC __half_raw float_to_half_rtne(float ff) { unsigned int mant_odd = (f.u >> 13) & 1; // resulting mantissa is odd // update exponent, rounding bias part 1 - f.u += ((unsigned int)(15 - 127) << 23) + 0xfff; + // Equivalent to `f.u += ((unsigned int)(15 - 127) << 23) + 0xfff`, but + // without arithmetic overflow. + f.u += 0xc8000fffU; // rounding bias part 2 f.u += mant_odd; // take the bits! -- cgit v1.2.3