1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
functor Test (R: REAL) =
struct
open R
val posZero = minPos - minPos
val negZero = ~posZero
val rs =
[(negZero, negZero, negZero),
(negZero, posZero, posZero),
(posZero, negZero, negZero),
(posZero, posZero, posZero),
(negZero, posInf, minPos),
(negZero, negInf, ~minPos),
(posZero, posInf, minPos),
(posZero, negInf, ~minPos),
(minPos, posZero, posZero),
(minPos, negZero, posZero),
(minPos, negInf, posZero),
(~minPos, posZero, negZero),
(~minPos, negZero, negZero),
(~minPos, posInf, negZero),
(minPos, minPos, minPos),
(~minPos, ~minPos, ~minPos),
(minPos, posInf, fromInt 2 * minPos),
(~minPos, negInf, ~(fromInt 2 * minPos)),
(maxFinite, posInf, posInf),
(~maxFinite, negInf, negInf),
(nextAfter (minNormalPos, negInf), posInf, minNormalPos)]
val () =
List.app
(fn (x, y, z) =>
let
val r2s = fmt StringCvt.EXACT
val z' = nextAfter (x, y)
in
print (concat ["nextAfter (", r2s x, ", ", r2s y, ") = ", r2s z', " ",
if == (z, z') then "OK" else concat ["<> ", r2s z],
"\n"])
end)
rs
end
structure Z = Test (Real32)
structure Z = Test (Real64)
|