On Wed, 22 Feb 2017 19:32:31 -0800, comdog wrote:
> Here's a curious change over in precision:
> 
>     > 4.999999999999999 ~~ 0..^5
>     True
>     > 4.9999999999999999 ~~ 0..^5
>     False
> 
> I figure this is an implementation detail that ties to storage, but
> one of the selling points of Perl 6 is that this sort of thing isn't
> a problem anymore.
> 
>     > $*PERL
>     Perl 6 (6.c)
>     > $*VM
>     moar (2017.01)


There are two issues at play here:

1) `cmp` with Rationals with Rational/Ints was busted and was using Num 
precision.
     This is now fixed[^1] and tested[^2], so `4.9999999999999999 ~~ 0..^5` 
does give True

2) My reading of the ticket suggests that you'd expect 
`4.99999999999999999999999 ~~ 0..^5` to give
    True as well, however, you'll notice that won't be the case, even after the 
fix in (1). The
    reason is such a number is too big to fit into a Rat. If you dump its 
components, you'll see
    the loss in precision:

        <Zoffix> m: dd 4.99999999999999999999999
        <camelia> rakudo-moar 9e8ecb: OUTPUT: 
«<499999999999999999999999/99999999999999991611392>␤»

     And it's that loss that would give the wrong answer when `cmp` it it or 
smartmatching with it.
     That behaviour is LTA and when we'd use proper uint64 for components, 
things would be even worse.
     There was a discussion[^3] on the topic today and one of the proposals was 
to create a RatStr
     allomorph in such cases which would basically behave as a non-infectious 
FatRat. I'll give that
     idea a go in the next few days (though I have a hunch 6.c tests would 
block this until 6.d).

     You don't have to wait for resolution of that issue, however, and can make 
a RatStr yourself, using
     angled brackets:

        <Zoffix> m: say <4.99999999999999999999999999999999999999999999> ~~ 
0..^5
        <camelia> rakudo-moar 9e8ecb: OUTPUT: «True␤»

     It produces the right result.

[1] 
https://github.com/rakudo/rakudo/commit/9e8ecb7bacedc8845dcf4b290aae431b00ba7e7c
[2] 
https://github.com/perl6/roast/commit/31d9af38842748798a720b0e7b22a305a998c040
[3] https://irclog.perlgeek.de/perl6/2017-02-23#i_14152769

Reply via email to