http://www.perlmonks.org?node_id=11137452


in reply to Re: Research into occasional participation in Perl/Raku development
in thread Research into occasional participation in Perl/Raku development

hi rob, from the docs we have:

Coerces both arguments to Numeric (if necessary); returns True if they are equal.
> my $x = 1/10; #0.1 > $x.^name; #Rat > my $y = 3602879701896397/36028797018963968; #0.100000000000000006 > $y.^name; #Rat > $x == $y #False (no coercion necessary) > $x == 0.1 #True (no coercion necessary) > $y == 0.1 #False (no coercion necessary) so comparing without coercion works as you expect > 0.1e0.^name; #Num > $x == 0.1e0 #True (coerces $x to Num, then compares) > $y == 0.1e0 #True (coerces $y to Num, then compares) coercion from Rat to Num can result in loss of precision > say $y.nude #(3602879701896397 36028797018963968) > say $y.Num #0.1 coercing this particular Rat to a Num collapses it to 0.1 IIRC the limit of Rat precision is e-14 ish (it gets lumpy), so in the general case it is fair to round away your ...00006 to 0 thus the Num 0.1 maps to both of these Rat options

your python example does much the same...

print (Fraction(3602879701896397, 36028797018963968) == 0.1); # True