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
|
structure R = Real
structure I = IEEEReal
structure V = Word8Vector
structure P = PackRealBig
fun setRM mode =
(I.setRoundingMode mode;
if I.getRoundingMode () <> mode
then raise Fail "setRM"
else ())
fun up() = setRM I.TO_POSINF
fun down() = setRM I.TO_NEGINF
fun near() = setRM I.TO_NEAREST
fun zero() = setRM I.TO_ZERO
(*
61 digits of 1 / 10 in Mathematica
In[7]:= RealDigits[1 / 10,2,61]
Out[7]= {{1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0,
0, 1, 1, 0, 0, 1, 1, 0, 0, 1,
1, 0, 0, 1, 1, 0, 0, 1, 1, 0,
0, 1, 1, 0, 0, 1, 1, 0, 0, 1,
1, 0, 0, 1, 1, 0, 0, 1, 1, 0,
0, 1, 1, 0, 0, 1, 1, 0, 0, 1},-3}
*)
val mtenth_lo = (down();1.0 / 10.0)
val mtenth_hi = (up();1.0 / 10.0)
val mtenth_near = (near();1.0 / 10.0)
val mtenth_zero = (zero();1.0 / 10.0)
fun word8vectorToString v = V.foldr (fn(w,s) => Word8.toString w ^ s) "" v
val _ = print(word8vectorToString (P.toBytes mtenth_lo) ^ "\n")
val _ = print(word8vectorToString (P.toBytes mtenth_hi) ^ "\n")
val _ = print(word8vectorToString (P.toBytes mtenth_near) ^ "\n")
val _ = print(word8vectorToString (P.toBytes mtenth_zero) ^ "\n")
|