Generalised floating point addition: Difference between revisions

Added Wren
(Rename Perl 6 -> Raku, alphabetize, minor clean-up)
(Added Wren)
Line 1,426:
 
Obviously, changing the code inside the <code>impl</code> namespace would alter how the calculation was carried out.
 
=={{header|Wren}}==
{{trans|Kotlin}}
{{libheader|wren-fmt}}
{{libheader|wren-big}}
The BigRat class in the above module allows not only rational numbers but decimal numbers of any size to be represented exactly. However, no bases other than 10 are supported.
 
Although the BigRat type supports multiplication, repeated addition has been used as in the Kotlin example.
<lang ecmascript>import "/big" for BigRat
import "/fmt" for Fmt
 
var repeatedAdd = Fn.new { |br, times|
var sum = BigRat.zero
for (i in 0...times) sum = sum + br
return sum
}
 
var s = "12345679"
var t = "123456790"
var e = 63
var ans = BigRat.fromDecimal("1e72")
for (n in -7..21) {
var br = BigRat.fromDecimal("%(s)e%(e)")
var oneE = BigRat.fromDecimal("1e%(e)")
var temp = repeatedAdd.call(br, 9)
var res = repeatedAdd.call(temp, 9) + oneE
Fmt.print("$2d : 1e72? $s", n, res == ans)
s = t + s
e = e - 9
}</lang>
 
{{out}}
<pre>
-7 : 1e72? true
-6 : 1e72? true
-5 : 1e72? true
-4 : 1e72? true
-3 : 1e72? true
-2 : 1e72? true
-1 : 1e72? true
0 : 1e72? true
1 : 1e72? true
2 : 1e72? true
3 : 1e72? true
4 : 1e72? true
5 : 1e72? true
6 : 1e72? true
7 : 1e72? true
8 : 1e72? true
9 : 1e72? true
10 : 1e72? true
11 : 1e72? true
12 : 1e72? true
13 : 1e72? true
14 : 1e72? true
15 : 1e72? true
16 : 1e72? true
17 : 1e72? true
18 : 1e72? true
19 : 1e72? true
20 : 1e72? true
21 : 1e72? true
</pre>
9,479

edits