> For what its worth, perl6 passes this test with flying colours.
This is because Perl 6 decimal literals are stored in a built-in rational type called Rat, which internally stores numbers as ratios between integers. So that 0.1, 0.2, 0.3 are internally stored as the tuples (1,10), (2,10), and (3,10), and the decimal value you see is just the string representation and not the actual internal value.
If you want your decimal literal to be floating-point (called Num in Perl 6), you want to add e0 to the end.
To wit:
perl6 -e 'say 0.1+0.2-0.3' reveals '0'
perl6 -e 'say 0.1e0+0.2e0-0.3e0' reveals '5.55111512312578e-17'