|
|
|
|
|
by espadrine
3507 days ago
|
|
For the sake of exhaustivity, let's point out that numeric literals in Perl6 separate rationals (Rat) and floating-point numbers (Num), which means the first Perl6 example would work as intended provided we stick with Rat: > 123456789 - 0.0000001
123456788.9999999
> (123456789 - 0.1) - 123456789
-0.1
Rationals represent numbers of the form a÷b, with a a bigint and b a 64-bit integer. When b gets too big for that fast representation, it gets converted to a Num (ie, IEEE 754). > (1 / (10 ** 100)).WHAT
(Num)
That tradeoff is reasonable, as numbers that cannot be represented this way are very likely to be non-rational math (eg, sqrt, exp, sin, pi, that kind of thing). For money, this is safe. For real numbers, well: > sin(0).WHAT
(Num)
FatRat uses a bigint for b. Obviously, it still cannot accurately represent non-rational numbers such as pi.Reference: https://docs.perl6.org/language/syntax#Number_literals
https://docs.perl6.org/type/Rat |
|