math: add more fmaf tests
[libc-test] / src / math / special / fmaf.h
index c6bc645..ef9957a 100644 (file)
@@ -45,3 +45,24 @@ T(RD,         -0x1p+0,         -0x1p+0,         -0x1p+0,         -0x0p+0,
 T(RD,        0x1p-120,        0x1p-120,        0x1p-149,        0x1p-149,        -0x1p-91, INEXACT|UNDERFLOW)
 T(RU,        0x1p-120,        0x1p-120,        0x1p-149,        0x1p-148,          0x1p+0, INEXACT|UNDERFLOW)
 T(RZ,        0x1p-120,        0x1p-120,        0x1p-149,        0x1p-149,        -0x1p-91, INEXACT|UNDERFLOW)
+T(RN,       -0x1p-100,     0x1.001p-49,        0x1p-126, 0x1.fffffcp-127,         0x1p-12, INEXACT|UNDERFLOW)
+T(RU,       -0x1p-100,     0x1.001p-49,        0x1p-126, 0x1.fffffcp-127,         0x1p-12, INEXACT|UNDERFLOW)
+T(RD,       -0x1p-100,     0x1.001p-49,        0x1p-126, 0x1.fffff8p-127,     -0x1.ffep-1, INEXACT|UNDERFLOW)
+T(RZ,       -0x1p-100,     0x1.001p-49,        0x1p-126, 0x1.fffff8p-127,     -0x1.ffep-1, INEXACT|UNDERFLOW)
+T(RN, -0x1.26524ep-54, -0x1.cb7868p+11,  0x1.d10f5ep-29,  0x1.d1179ep-29,         -0x1p-1, INEXACT)
+T(RU, -0x1.26524ep-54, -0x1.cb7868p+11,  0x1.d10f5ep-29,   0x1.d117ap-29,          0x1p-1, INEXACT)
+T(RD, -0x1.26524ep-54, -0x1.cb7868p+11,  0x1.d10f5ep-29,  0x1.d1179ep-29,         -0x1p-1, INEXACT)
+T(RZ, -0x1.26524ep-54, -0x1.cb7868p+11,  0x1.d10f5ep-29,  0x1.d1179ep-29,         -0x1p-1, INEXACT)
+// double precision x*y+z is a half-way float
+T(RN,   0x1.000002p+0,   0x1.fffffep+0,  0x1.fffffep-47,          0x1p+1,         -0x1p-1, INEXACT)
+T(RN,   0x1.000002p+0,   0x1.fffffep+0,         0x1p-46,          0x1p+1,         -0x1p-1, INEXACT)
+T(RN,   0x1.000002p+0,   0x1.fffffep+0,  0x1.000002p-46,   0x1.000002p+1,          0x1p-1, INEXACT)
+T(RN,   0x1.000002p+0,  -0x1.fffffep+0, -0x1.fffffep-47,         -0x1p+1,          0x1p-1, INEXACT)
+T(RN,   0x1.000002p+0,  -0x1.fffffep+0,        -0x1p-46,         -0x1p+1,          0x1p-1, INEXACT)
+T(RN,   0x1.000002p+0,  -0x1.fffffep+0, -0x1.000002p-46,  -0x1.000002p+1,         -0x1p-1, INEXACT)
+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,   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)