;;; -*-conf-*- ;;; Tests for floating-point conversions ;;;-------------------------------------------------------------------------- [round] ;; Some easy special cases. round = nearest-even n = 16 f = ZERO ff = ZERO err = OK round = nearest-even n = 16 f = INF | NEG ff = INF | NEG err = OK ;; Check that we round at the right bit. round = nearest-even n = 12 f = 0 e = 0 m = fff00000 ff = 0 ee = 0 mm = fff00000 err = OK round = nearest-even n = 12 f = 0 e = 0 m = ffe80000 ff = 0 ee = 0 mm = ffe00000 err = INEXACT round = nearest-even n = 12 f = 0 e = 0 m = fff80000 ff = 0 ee = 1 mm = 80000000 err = INEXACT ;; Check rounding of multi-word fractions. round = nearest-even n = 76 f = 0 e = 12 m = ffffffff ffffffff fff00000 00000000 ff = 0 ee = 12 mm = ffffffff ffffffff fff00000 err = OK round = nearest-even n = 76 f = 0 e = 0 m = ffffffff fffeffff fff00000 00000001 ff = 0 ee = 0 mm = ffffffff fffeffff fff00000 err = INEXACT round = nearest-even n = 76 f = 0 e = 0 m = ffffffff ffffffff ffe80000 00000000 ff = 0 ee = 0 mm = ffffffff ffffffff ffe00000 err = INEXACT round = nearest-even n = 76 f = 0 e = 0 m = ffffffff fffeffff ffe80000 00000001 ff = 0 ee = 0 mm = ffffffff fffeffff fff00000 err = INEXACT round = nearest-even n = 76 f = 0 e = 0 m = ffffffff fffeffff fff80000 00000000 ff = 0 ee = 0 mm = ffffffff ffff0000 00000000 err = INEXACT ;; Check carry up to next exponent. round = nearest-even n = 76 f = 0 e = -18 m = ffffffff ffffffff fff80000 00000000 ff = 0 ee = -17 mm = 80000000 00000000 00000000 err = INEXACT ;; Check rounding modes. round = zero n = 12 f = 0 e = 0 m = bfffffff ff = 0 ee = 0 mm = bff00000 err = INEXACT round = zero n = 12 f = NEG e = 0 m = bfffffff ff = NEG ee = 0 mm = bff00000 err = INEXACT round = neginf n = 12 f = 0 e = 0 m = bfffffff ff = 0 ee = 0 mm = bff00000 err = INEXACT round = neginf n = 12 f = NEG e = 0 m = bfffffff ff = NEG ee = 0 mm = c0000000 err = INEXACT ;; Check inexactness detection. round = nearest-even n = 12 f = 0 e = 0 m = ffe00001 ff = 0 ee = 0 mm = ffe00000 err = INEXACT round = nearest-even n = 12 f = 0 e = 0 m = fff00001 ff = 0 ee = 0 mm = fff00000 err = INEXACT ;; Check rounding at word boundaries. round = nearest-even n = 32 f = 0 e = 0 m = 80000001 00000001 ff = 0 ee = 0 mm = 80000001 err = INEXACT round = nearest-even n = 32 f = 0 e = 0 m = 80000000 80000000 ff = 0 ee = 0 mm = 80000000 err = INEXACT round = nearest-even n = 32 f = 0 e = 0 m = 80000000 80000001 ff = 0 ee = 0 mm = 80000001 err = INEXACT round = nearest-even n = 32 f = 0 e = 0 m = 80000001 80000000 ff = 0 ee = 0 mm = 80000002 err = INEXACT ;;;-------------------------------------------------------------------------- ;;; IEEE conversions. [encf64] ;; NaN conversions f = QNAN m = #empty z = 7ff80000 00000000 f = SNAN m = #empty z = 7ff00000 00000001 err = INEXACT f = SNAN m = 00000000 00002000 z = 7ff00000 00000001 f = SNAN m = 00000000 00001fff z = 7ff00000 00000001 err = INEXACT f = SNAN m = 00000000 00000000 00000001 z = 7ff00000 00000001 err = INEXACT ;; Check NaN truncation. errmask = 0 f = QNAN m = 090cad8d 8de42000 00000000 z = 7ff84865 6c6c6f21 err = OK errmask = 0 f = QNAN m = 090cad8d 8de43000 z = 00000000 00000000 err = INEXACT errmask = 0 f = QNAN m = 090cad8d 8de42000 00000001 z = 00000000 00000000 err = INEXACT round = posinf errmask = INEXACT f = QNAN m = 090cad8d 8de43fff z = 7ff84865 6c6c6f21 err = INEXACT ;; Check subnormal underflow. errmask = 0 f = 0 e = -1073 m = 80000000 z = 00000000 00000001 err = OK errmask = UFLOW | INEXACT f = 0 e = -1074 m = 80000000 z = 00000000 00000000 err = UFLOW | INEXACT round = projinf errmask = UFLOW | INEXACT f = 0 e = -1074 m = 80000000 z = 00000000 00000001 err = INEXACT round = projinf errmask = UFLOW | INEXACT f = 0 e = -1075 m = ffffffff z = 00000000 00000000 err = UFLOW | INEXACT ;; Check ordinary rounding. errmask = INEXACT f = NEG e = 0 m = 22222222 22223800 z = bfe44444 44444447 err = OK errmask = 0 f = NEG e = 0 m = 22222222 22223801 z = 00000000 00000000 err = INEXACT round = nearest-even errmask = INEXACT f = NEG e = 0 m = 22222222 22223801 z = bfe44444 44444447 err = INEXACT round = nearest-even errmask = INEXACT f = NEG e = 0 m = 22222222 22223bff z = bfe44444 44444447 err = INEXACT round = nearest-even errmask = INEXACT f = NEG e = 0 m = 22222222 22223c00 z = bfe44444 44444448 err = INEXACT round = nearest-even errmask = INEXACT f = NEG e = 0 m = 22222222 22223fff z = bfe44444 44444448 err = INEXACT round = posinf errmask = INEXACT f = NEG e = 0 m = 22222222 22223fff z = bfe44444 44444447 err = INEXACT ;; Check overflow and infinity. errmask = INEXACT | OFLOW f = 0 e = 1024 m = ffffffff fffff800 z = 7fefffff ffffffff err = OK round = nearest-even errmask = INEXACT | OFLOW f = 0 e = 1024 m = ffffffff fffff801 z = 7fefffff ffffffff err = INEXACT round = nearest-even errmask = INEXACT | OFLOW f = 0 e = 1024 m = ffffffff fffffbff z = 7fefffff ffffffff err = INEXACT round = nearest-even errmask = INEXACT | OFLOW f = 0 e = 1024 m = ffffffff fffffc00 z = 7ff00000 00000000 err = INEXACT | OFLOW round = neginf errmask = INEXACT | OFLOW f = 0 e = 4096 m = ffffffff z = 7fefffff ffffffff err = INEXACT | OFLOW [encf128] ;; This was a randomized test that caught a bug. f = NEG e = 4400 m = cd1c3727 b1c7bb96 c3668568 z = d12e9a38 6e4f638f 772d86cd 0ad00000 ;;;-------------------------------------------------------------------------- ;;; Native format conversions. [encflt] f = ZERO z = 0.0 @assume = negz f = NEG | ZERO z = -0.0 @assume = inf f = INF z = #+inf @assume = inf f = NEG | INF z = #-inf f = NEG e = 0 m = a0000000 00000000 z = -0.625 @assume = prec24 f = 0 e = 3 m = c90fdb00 z = 6.2831853 @assume = stdc-nan f = QNAN m = #empty z = #nan err = INEXACT @assume = ieee f = QNAN m = #empty z = #nan [decflt] x = 0.0 f = ZERO @assume = negz x = -0.0 f = NEG | ZERO x = -0.625 f = NEG e = 0 m = a0000000 @assume = prec24 x = 6.2831853 f = 0 e = 3 m = c90fdb00 @assume = inf x = #+inf f = INF @assume = inf x = #-inf f = NEG | INF @assume = stdc-nan x = #nan f = QNAN err = INEXACT @assume = ieee x = #nan f = QNAN ;; m = ... something err = OK [encdbl] f = ZERO z = 0.0 @assume = negz f = NEG | ZERO z = -0.0 @assume = inf f = INF z = #+inf @assume = inf f = NEG | INF z = #-inf f = NEG e = 0 m = a0000000 00000000 z = -0.625 @assume = prec53 f = 0 e = 3 m = c90fdaa2 2168c000 z = 6.283185307179586 @assume = stdc-nan f = QNAN m = #empty z = #nan err = INEXACT @assume = ieee f = QNAN m = #empty z = #nan err = OK [decdbl] x = 0.0 f = ZERO @assume = negz x = -0.0 f = NEG | ZERO x = -0.625 f = NEG e = 0 m = a0000000 00000000 @assume = prec53 x = 6.283185307179586 f = 0 e = 3 m = c90fdaa2 2168c000 @assume = inf x = #+inf f = INF @assume = inf x = #-inf f = NEG | INF @assume = stdc-nan x = #nan f = QNAN err = INEXACT @assume = ieee x = #nan f = QNAN ;; m = ... something err = OK ;;;-------------------------------------------------------------------------- ;;; Direct conversions. [f32btoflt] x = 00000000 z = 0.0 @assume = negz x = 80000000 z = -0.0 @assume = inf x = 7f800000 z = #+inf @assume = inf x = ff800000 z = #-inf @assume = stdc-nan | ieee x = 7fc00000 z = #nan @assume = stdc-nan | ieee x = 7fa00000 z = #nan x = 3f800000 z = 1.0 @assume = prec24 x = 40c90fdb z = 6.2831853 [f32ltoflt] x = 10c12549 z = 678929 [flttof32b] x = 678929 z = 4925c110 @assume = prec24 x = 6.2831853 z = 40c90fdb [flttof32l] x = 678929 z = 10c12549 [dbltof64b] x = 0.0 z = 00000000 00000000 x = -2964135146 z = c1e615a3 9d400000 @assume = prec53 x = 6.283185307179586 z = 401921fb 54442d18 [dbltof64l] x = -2964135146 z = 0000409d a315e6c1 [f64btodbl] x = c1e615a3 9d400000 z = -2964135146 [f64ltodbl] x = 0000409d a315e6c1 z = -2964135146 ;;;--------------------------------------------------------------------------