Backport from sid to buster
[hcoop/debian/mlton.git] / regression / ieee-real.sml
1 structure R = Real
2 structure I = IEEEReal
3 structure V = Word8Vector
4 structure P = PackRealBig
5
6 fun setRM mode =
7 (I.setRoundingMode mode;
8 if I.getRoundingMode () <> mode
9 then raise Fail "setRM"
10 else ())
11
12 fun up() = setRM I.TO_POSINF
13 fun down() = setRM I.TO_NEGINF
14 fun near() = setRM I.TO_NEAREST
15 fun zero() = setRM I.TO_ZERO
16
17 (*
18
19 61 digits of 1 / 10 in Mathematica
20
21 In[7]:= RealDigits[1 / 10,2,61]
22
23 Out[7]= {{1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0,
24 0, 1, 1, 0, 0, 1, 1, 0, 0, 1,
25 1, 0, 0, 1, 1, 0, 0, 1, 1, 0,
26 0, 1, 1, 0, 0, 1, 1, 0, 0, 1,
27 1, 0, 0, 1, 1, 0, 0, 1, 1, 0,
28 0, 1, 1, 0, 0, 1, 1, 0, 0, 1},-3}
29
30 *)
31
32
33 val mtenth_lo = (down();1.0 / 10.0)
34 val mtenth_hi = (up();1.0 / 10.0)
35 val mtenth_near = (near();1.0 / 10.0)
36 val mtenth_zero = (zero();1.0 / 10.0)
37
38 fun word8vectorToString v = V.foldr (fn(w,s) => Word8.toString w ^ s) "" v
39
40 val _ = print(word8vectorToString (P.toBytes mtenth_lo) ^ "\n")
41 val _ = print(word8vectorToString (P.toBytes mtenth_hi) ^ "\n")
42 val _ = print(word8vectorToString (P.toBytes mtenth_near) ^ "\n")
43 val _ = print(word8vectorToString (P.toBytes mtenth_zero) ^ "\n")