Generalised floating point addition: Difference between revisions

Line 586:
 
=={{header|Racket}}==
 
Racket has native arbitrary precision numbers (if in doubt, prefixed with <code>#e...</code>)
 
The printed result is the exact difference of 1e72 and the result. So those <code>0</code>s you see are exactly nothing.
 
<lang racket>#lang racket
(define (f n (printf printf))
(define exponent (* (- n) 9))
(define mantissa
(for/fold ((m 0))
((i (in-range -7 (add1 n))))
(+ (* m 1000000000) 12345679)))
 
(let ((rv (+ (expt 10 exponent) (* mantissa (expt 10 exponent) 81))))
(printf "~ae~a * 81 + 1e~a - 1e72 = ~a~%"
(~.a mantissa
#:max-width 20
#:limit-marker (format "..[~a].." (add1 (order-of-magnitude mantissa))))
exponent
exponent
(- #e1e72 rv))
rv))
 
(module+ test
(require rackunit)
(check-equal? (f -7 void) (expt 10 72))
(check-equal? (f -6 void) (expt 10 72)))
 
(module+ main
(displayln "number in brackets is TOTAL number of digits")
(for ((i (in-range -7 (add1 21)))) (f i)))</lang>
 
{{out}}
 
<pre>number in brackets is TOTAL number of digits
12345679e63 * 81 + 1e63 - 1e72 = 0
12345679012345679e54 * 81 + 1e54 - 1e72 = 0
123456790123..[26]..e45 * 81 + 1e45 - 1e72 = 0
123456790123..[35]..e36 * 81 + 1e36 - 1e72 = 0
123456790123..[44]..e27 * 81 + 1e27 - 1e72 = 0
123456790123..[53]..e18 * 81 + 1e18 - 1e72 = 0
123456790123..[62]..e9 * 81 + 1e9 - 1e72 = 0
123456790123..[71]..e0 * 81 + 1e0 - 1e72 = 0
123456790123..[80]..e-9 * 81 + 1e-9 - 1e72 = 0
123456790123..[89]..e-18 * 81 + 1e-18 - 1e72 = 0
123456790123..[98]..e-27 * 81 + 1e-27 - 1e72 = 0
12345679012..[107]..e-36 * 81 + 1e-36 - 1e72 = 0
12345679012..[116]..e-45 * 81 + 1e-45 - 1e72 = 0
12345679012..[125]..e-54 * 81 + 1e-54 - 1e72 = 0
12345679012..[134]..e-63 * 81 + 1e-63 - 1e72 = 0
12345679012..[143]..e-72 * 81 + 1e-72 - 1e72 = 0
12345679012..[152]..e-81 * 81 + 1e-81 - 1e72 = 0
12345679012..[161]..e-90 * 81 + 1e-90 - 1e72 = 0
12345679012..[170]..e-99 * 81 + 1e-99 - 1e72 = 0
12345679012..[179]..e-108 * 81 + 1e-108 - 1e72 = 0
12345679012..[188]..e-117 * 81 + 1e-117 - 1e72 = 0
12345679012..[197]..e-126 * 81 + 1e-126 - 1e72 = 0
12345679012..[206]..e-135 * 81 + 1e-135 - 1e72 = 0
12345679012..[215]..e-144 * 81 + 1e-144 - 1e72 = 0
12345679012..[224]..e-153 * 81 + 1e-153 - 1e72 = 0
12345679012..[233]..e-162 * 81 + 1e-162 - 1e72 = 0
12345679012..[242]..e-171 * 81 + 1e-171 - 1e72 = 0
12345679012..[251]..e-180 * 81 + 1e-180 - 1e72 = 0
12345679012..[260]..e-189 * 81 + 1e-189 - 1e72 = 0
</pre>
 
=={{header|REXX}}==
569

edits