File: ieee-real.sml

package info (click to toggle)
mlton 20210117%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 58,464 kB
  • sloc: ansic: 27,682; sh: 4,455; asm: 3,569; lisp: 2,879; makefile: 2,347; perl: 1,169; python: 191; pascal: 68; javascript: 7
file content (43 lines) | stat: -rw-r--r-- 1,187 bytes parent folder | download | duplicates (6)
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")