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