Hex Artifact Content
Not logged in

Artifact 3f4af159dc18c2d62e5d2a54182c549d2903a60e:


0000: 0a 3b 3b 20 42 72 65 61 6b 20 61 20 70 6f 73 69  .;; Break a posi
0010: 74 69 76 65 20 72 65 61 6c 20 6e 75 6d 62 65 72  tive real number
0020: 20 64 6f 77 6e 20 74 6f 20 61 20 6e 6f 72 6d 61   down to a norma
0030: 6c 69 7a 65 64 20 6d 61 6e 74 69 73 73 61 20 61  lized mantissa a
0040: 6e 64 0a 3b 3b 20 65 78 70 6f 6e 65 6e 74 2e 20  nd.;; exponent. 
0050: 44 65 66 61 75 6c 74 20 62 61 73 65 3d 32 2c 20  Default base=2, 
0060: 6d 61 6e 74 2d 73 69 7a 65 3d 35 32 2c 20 65 78  mant-size=52, ex
0070: 70 2d 73 69 7a 65 3d 31 31 20 66 6f 72 20 49 45  p-size=11 for IE
0080: 45 45 20 64 6f 75 62 6c 65 73 2e 0a 0a 0a 28 64  EE doubles....(d
0090: 65 66 69 6e 65 20 6d 61 6e 74 69 73 73 61 2b 65  efine mantissa+e
00a0: 78 70 6f 6e 65 6e 74 0a 20 20 28 63 61 73 65 2d  xponent.  (case-
00b0: 6c 61 6d 62 64 61 20 0a 20 20 20 20 5b 28 6e 75  lambda .    [(nu
00c0: 6d 29 20 28 6d 61 6e 74 69 73 73 61 2b 65 78 70  m) (mantissa+exp
00d0: 6f 6e 65 6e 74 20 6e 75 6d 20 32 29 5d 0a 20 20  onent num 2)].  
00e0: 20 20 5b 28 6e 75 6d 20 62 61 73 65 29 20 28 6d    [(num base) (m
00f0: 61 6e 74 69 73 73 61 2b 65 78 70 6f 6e 65 6e 74  antissa+exponent
0100: 20 6e 75 6d 20 62 61 73 65 20 35 32 29 5d 0a 20   num base 52)]. 
0110: 20 20 20 5b 28 6e 75 6d 20 62 61 73 65 20 6d 61     [(num base ma
0120: 6e 74 2d 73 69 7a 65 29 20 28 6d 61 6e 74 69 73  nt-size) (mantis
0130: 73 61 2b 65 78 70 6f 6e 65 6e 74 20 6e 75 6d 20  sa+exponent num 
0140: 62 61 73 65 20 6d 61 6e 74 2d 73 69 7a 65 20 31  base mant-size 1
0150: 31 29 5d 0a 20 20 20 20 5b 28 6e 75 6d 20 62 61  1)].    [(num ba
0160: 73 65 20 6d 61 6e 74 2d 73 69 7a 65 20 65 78 70  se mant-size exp
0170: 2d 73 69 7a 65 29 0a 20 20 20 20 20 28 69 66 20  -size).     (if 
0180: 28 7a 65 72 6f 3f 20 6e 75 6d 29 0a 09 20 28 6c  (zero? num).. (l
0190: 69 73 74 20 30 20 30 29 0a 09 20 28 6c 65 74 2a  ist 0 0).. (let*
01a0: 20 28 28 62 6f 74 20 28 65 78 70 74 20 62 61 73   ((bot (expt bas
01b0: 65 20 6d 61 6e 74 2d 73 69 7a 65 29 29 0a 09 09  e mant-size))...
01c0: 28 74 6f 70 20 28 2a 20 62 61 73 65 20 62 6f 74  (top (* base bot
01d0: 29 29 29 0a 09 20 20 20 28 6c 65 74 20 6c 70 20  )))..   (let lp 
01e0: 28 28 6e 20 6e 75 6d 29 20 28 65 20 30 29 29 0a  ((n num) (e 0)).
01f0: 09 20 20 20 20 20 28 63 6f 6e 64 0a 09 20 20 20  .     (cond..   
0200: 20 20 20 28 28 3e 3d 20 6e 20 74 6f 70 29 20 28     ((>= n top) (
0210: 6c 70 20 28 71 75 6f 74 69 65 6e 74 20 6e 20 62  lp (quotient n b
0220: 61 73 65 29 20 28 2b 20 65 20 31 29 29 29 0a 09  ase) (+ e 1)))..
0230: 20 20 20 20 20 20 28 28 3c 20 6e 20 62 6f 74 29        ((< n bot)
0240: 20 28 6c 70 20 28 2a 20 6e 20 62 61 73 65 29 20   (lp (* n base) 
0250: 28 2d 20 65 20 31 29 29 29 0a 09 20 20 20 20 20  (- e 1)))..     
0260: 20 28 65 6c 73 65 20 28 6c 69 73 74 20 6e 20 65   (else (list n e
0270: 29 29 29 29 29 29 5d 29 29 0a                    ))))))])).