math: add fma TODO comments about the underflow issue
[musl] / src / math / fmaf.c
index a1c7f4f..745ee39 100644 (file)
@@ -49,7 +49,14 @@ float fmaf(float x, float y, float z)
                (hr & 0x7ff00000) == 0x7ff00000 ||  /* NaN */
                result - xy == z ||                 /* exact */
                fegetround() != FE_TONEAREST)       /* not round-to-nearest */
-               return (result);
+       {
+               /*
+               TODO: underflow is not raised correctly, example in
+               downward rouding: fmaf(0x1p-120f, 0x1p-120f, 0x1p-149f)
+               */
+               z = result;
+               return z;
+       }
 
        /*
         * If result is inexact, and exactly halfway between two float values,
@@ -63,5 +70,6 @@ float fmaf(float x, float y, float z)
        fesetround(FE_TONEAREST);
        if (result == adjusted_result)
                SET_LOW_WORD(adjusted_result, lr + 1);
-       return (adjusted_result);
+       z = adjusted_result;
+       return z;
 }