math: add fma(x,y,z) test cases for z=0 and x*y rounds to -0
authorSzabolcs Nagy <nsz@port70.net>
Wed, 13 Mar 2024 21:05:24 +0000 (21:05 +0000)
committerSzabolcs Nagy <nsz@port70.net>
Wed, 13 Mar 2024 21:05:24 +0000 (21:05 +0000)
src/math/special/fma.h
src/math/special/fmaf.h
src/math/special/fmal.h

index 5a3db10..d63f816 100644 (file)
@@ -847,3 +847,11 @@ T(RZ,              -0x1p-1000,          0x1.000001p-74,               0x1p-1022,
 //T(RU,              -0x1p-1000,                0x1p-200,               0x1p-1022,               0x1p-1022,         0x1p-26, INEXACT)
 T(RD,              -0x1p-1000,                0x1p-200,               0x1p-1022, 0x1.ffffffffffffep-1023,         -0x1p+0, INEXACT|UNDERFLOW)
 T(RZ,              -0x1p-1000,                0x1p-200,               0x1p-1022, 0x1.ffffffffffffep-1023,         -0x1p+0, INEXACT|UNDERFLOW)
+T(RN,              -0x1p-1000,                0x1p-100,                  0x0p+0,                 -0x0p+0,         0x1p-26, INEXACT|UNDERFLOW)
+T(RN,              -0x1p-1000,                0x1p-100,                 -0x0p+0,                 -0x0p+0,         0x1p-26, INEXACT|UNDERFLOW)
+T(RZ,              -0x1p-1000,                0x1p-100,                  0x0p+0,                 -0x0p+0,         0x1p-26, INEXACT|UNDERFLOW)
+T(RZ,              -0x1p-1000,                0x1p-100,                 -0x0p+0,                 -0x0p+0,         0x1p-26, INEXACT|UNDERFLOW)
+T(RD,              -0x1p-1000,                0x1p-100,                  0x0p+0,              -0x1p-1074,         -0x1p+0, INEXACT|UNDERFLOW)
+T(RD,              -0x1p-1000,                0x1p-100,                 -0x0p+0,              -0x1p-1074,         -0x1p+0, INEXACT|UNDERFLOW)
+T(RU,              -0x1p-1000,                0x1p-100,                  0x0p+0,                 -0x0p+0,         0x1p-26, INEXACT|UNDERFLOW)
+T(RU,              -0x1p-1000,                0x1p-100,                 -0x0p+0,                 -0x0p+0,         0x1p-26, INEXACT|UNDERFLOW)
index ef9957a..fdbb6d9 100644 (file)
@@ -66,3 +66,11 @@ T(RN,   0x1.000004p+0,   0x1.fffffep+0,  0x1.000002p-45,   0x1.000004p+1,
 T(RN,   0x1.000004p+0,  -0x1.fffffep+0, -0x1.fffffep-46,  -0x1.000002p+1,          0x1p-1, INEXACT)
 T(RN,   0x1.000004p+0,  -0x1.fffffep+0,        -0x1p-45,  -0x1.000004p+1,         -0x1p-1, INEXACT)
 T(RN,   0x1.000004p+0,  -0x1.fffffep+0, -0x1.000002p-45,  -0x1.000004p+1,         -0x1p-1, INEXACT)
+T(RN,       -0x1p-100,        0x1p-100,          0x0p+0,         -0x0p+0,         0x1p-51, INEXACT|UNDERFLOW)
+T(RN,       -0x1p-100,        0x1p-100,         -0x0p+0,         -0x0p+0,         0x1p-51, INEXACT|UNDERFLOW)
+T(RZ,       -0x1p-100,        0x1p-100,          0x0p+0,         -0x0p+0,         0x1p-51, INEXACT|UNDERFLOW)
+T(RZ,       -0x1p-100,        0x1p-100,         -0x0p+0,         -0x0p+0,         0x1p-51, INEXACT|UNDERFLOW)
+T(RD,       -0x1p-100,        0x1p-100,          0x0p+0,       -0x1p-149,         -0x1p+0, INEXACT|UNDERFLOW)
+T(RD,       -0x1p-100,        0x1p-100,         -0x0p+0,       -0x1p-149,         -0x1p+0, INEXACT|UNDERFLOW)
+T(RU,       -0x1p-100,        0x1p-100,          0x0p+0,         -0x0p+0,         0x1p-51, INEXACT|UNDERFLOW)
+T(RU,       -0x1p-100,        0x1p-100,         -0x0p+0,         -0x0p+0,         0x1p-51, INEXACT|UNDERFLOW)
index 1f60313..161b791 100644 (file)
@@ -47,3 +47,11 @@ T(RN,                   -0x1p-10000L,       0x1.0000000000001p-6445L,
 T(RU,                   -0x1p-10000L,       0x1.0000000000001p-6445L,                    0x1p-16382L,   0x1.fffffffffffffffcp-16383L,         0x1p-52, INEXACT|UNDERFLOW)
 T(RD,                   -0x1p-10000L,       0x1.0000000000001p-6445L,                    0x1p-16382L,   0x1.fffffffffffffff8p-16383L,         -0x1p+0, INEXACT|UNDERFLOW)
 T(RZ,                   -0x1p-10000L,       0x1.0000000000001p-6445L,                    0x1p-16382L,   0x1.fffffffffffffff8p-16383L,         -0x1p+0, INEXACT|UNDERFLOW)
+T(RN,                   -0x1p-10000L,                     0x1p-6500L,                        0x0p+0L,                       -0x0p+0L,         0x1p-55, INEXACT|UNDERFLOW)
+T(RN,                   -0x1p-10000L,                     0x1p-6500L,                       -0x0p+0L,                       -0x0p+0L,         0x1p-55, INEXACT|UNDERFLOW)
+T(RZ,                   -0x1p-10000L,                     0x1p-6500L,                        0x0p+0L,                       -0x0p+0L,         0x1p-55, INEXACT|UNDERFLOW)
+T(RZ,                   -0x1p-10000L,                     0x1p-6500L,                       -0x0p+0L,                       -0x0p+0L,         0x1p-55, INEXACT|UNDERFLOW)
+T(RD,                   -0x1p-10000L,                     0x1p-6500L,                        0x0p+0L,                   -0x1p-16445L,         -0x1p+0, INEXACT|UNDERFLOW)
+T(RD,                   -0x1p-10000L,                     0x1p-6500L,                       -0x0p+0L,                   -0x1p-16445L,         -0x1p+0, INEXACT|UNDERFLOW)
+T(RU,                   -0x1p-10000L,                     0x1p-6500L,                        0x0p+0L,                       -0x0p+0L,         0x1p-55, INEXACT|UNDERFLOW)
+T(RU,                   -0x1p-10000L,                     0x1p-6500L,                       -0x0p+0L,                       -0x0p+0L,         0x1p-55, INEXACT|UNDERFLOW)