From 3db7598e291a17fbec6307b490a7dbe891723423 Mon Sep 17 00:00:00 2001 From: Kevin Backhouse Date: Sat, 16 Jul 2022 23:25:59 +0100 Subject: [PATCH] Don't use long in floatToRationalCast --- src/types.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/types.cpp b/src/types.cpp index ff6bc48b..605c0ac8 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -614,18 +614,18 @@ Rational floatToRationalCast(float f) { // below. (INT_MAX can be represented accurately as a double, but // gets rounded when it's converted to float.) const double d = f; - const bool in_range = INT_MIN <= d && d <= INT_MAX; + const bool in_range = std::numeric_limits::min() <= d && d <= std::numeric_limits::max(); if (!in_range) { return {d > 0 ? 1 : -1, 0}; } // Beware: primitive conversion algorithm int32_t den = 1000000; - const auto d_as_long = static_cast(d); - if (Safe::abs(d_as_long) > 21474836) { + const auto d_as_int32_t = static_cast(d); + if (Safe::abs(d_as_int32_t) > 21474836) { den = 1; - } else if (Safe::abs(d_as_long) > 214748) { + } else if (Safe::abs(d_as_int32_t) > 214748) { den = 100; - } else if (Safe::abs(d_as_long) > 2147) { + } else if (Safe::abs(d_as_int32_t) > 2147) { den = 10000; } const auto nom = static_cast(std::round(d * den));