From 9f9e9d9cfc2e2f929c17de4a1065c0eb68e479c0 Mon Sep 17 00:00:00 2001 From: Peter Steinfeld Date: Thu, 7 Jul 2022 10:42:47 -0700 Subject: [PATCH] [flang] SET_EXPONENT(-0.0) should return -0.0 Section 16.9.171 says: If X has the value zero, the result has the same value as X So if X is -0.0, SET_EXPONENT should return -0.0. Differential Revision: https://reviews.llvm.org/D129309 --- flang/runtime/numeric.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flang/runtime/numeric.cpp b/flang/runtime/numeric.cpp index 8d0297317b4d..a989d3a43a4d 100644 --- a/flang/runtime/numeric.cpp +++ b/flang/runtime/numeric.cpp @@ -122,7 +122,7 @@ template inline T SetExponent(T x, std::int64_t p) { } else if (std::isinf(x)) { return std::numeric_limits::quiet_NaN(); // +/-Inf -> NaN } else if (x == 0) { - return 0; // 0 -> 0 + return x; // return negative zero if x is negative zero } else { int expo{std::ilogb(x) + 1}; auto ip{static_cast(p - expo)};