[flang-commits] [flang] 6c9c69b - [flang] Retain the sign of the argument for the result of fraction(0)

V Donaldson via flang-commits flang-commits at lists.llvm.org
Fri May 26 09:24:50 PDT 2023


Author: V Donaldson
Date: 2023-05-26T09:24:30-07:00
New Revision: 6c9c69bd761653372999c09c7862290f8793068a

URL: https://github.com/llvm/llvm-project/commit/6c9c69bd761653372999c09c7862290f8793068a
DIFF: https://github.com/llvm/llvm-project/commit/6c9c69bd761653372999c09c7862290f8793068a.diff

LOG: [flang] Retain the sign of the argument for the result of fraction(0)

The f18 clause 16.9.80 description of the FRACTION(X) intrinsic states:

    Result Value. The result has the value ....
    If X has the value zero, the result is zero.
    If X is an IEEE NaN, the result is that NaN.
    If X is an IEEE infinity, the result is an IEEE NaN.

This clause does not specify whether fraction(-0.0) should be -0.0 or +0.0.
However, a folded result and a runtime result should be consistent, and
returning -0.0 is more in line with the result for fraction(NaN).

For this test:

  print '(2f6.1)', 0.0, fraction(0.0)
  call f(0.0)
  print '(2f6.1)', -0.0, fraction(-0.0)
  call f(-0.0)
  end

  subroutine f(x)
    print '(2f6.1)', x, fraction(x)
  end

Current output is:

   0.0   0.0
   0.0   0.0
  -0.0  -0.0
  -0.0   0.0

Change that to:

   0.0   0.0
   0.0   0.0
  -0.0  -0.0
  -0.0  -0.0

Added: 
    

Modified: 
    flang/runtime/numeric.cpp

Removed: 
    


################################################################################
diff  --git a/flang/runtime/numeric.cpp b/flang/runtime/numeric.cpp
index 676008792d8cc..5376bcb569fbe 100644
--- a/flang/runtime/numeric.cpp
+++ b/flang/runtime/numeric.cpp
@@ -83,7 +83,7 @@ template <typename T> inline T Fraction(T x) {
   } else if (std::isinf(x)) {
     return std::numeric_limits<T>::quiet_NaN(); // +/-Inf -> NaN
   } else if (x == 0) {
-    return 0; // 0 -> 0
+    return x; // 0 -> same 0
   } else {
     int ignoredExp;
     return std::frexp(x, &ignoredExp);


        


More information about the flang-commits mailing list