develooper Front page | perl.perl6.compiler | Postings from April 2018

[perl #128914] [BUG] decimal->float conversion differs for literalsand Str.Num

Thread Previous | Thread Next
Zoffix Znet via RT
April 13, 2018 10:14
[perl #128914] [BUG] decimal->float conversion differs for literalsand Str.Num
Message ID:
On Fri, 12 Aug 2016 10:24:48 -0700, wrote:
> > "9.998999999999999e0".EVAL - "9.998999999999999e0".Num
> 1.77635683940025e-15
> Observe that the same string yields different Num values when interpreted
> as a Num literal and when coerced.  Where the string is meaningful both
> ways, this is a bug.  Obviously there are some situations where the
> syntax of Perl 6 literals doesn't exactly match what one would expect of
> a Str.Num conversion, but that's not the case here.  Where the syntax
> matches, as it does in this case, or more generally where the same
> digits are presented with the same weights, one would expect the core
> decimal->float conversion to behave the same for both.
> The conversions yielding different values implies that at least one
> of them is individually incorrect.  In this case, the coercion yields
> the correctly-rounded value, and the literal is getting it wrong.
> [perl #128912] is concerned with these conversions being incorrect per se,
> and my test case there used the conversion for literals.  The difference
> between the two forms of decimal->float conversion is not merely a matter
> of literals getting it wrong and coercion getting it right: there are also
> cases where the coercion gets it wrong.  In fact, coercion gets it wrong
> in the [perl #128912] test case: both literal interpretation and coercion
> get "9.999e-5" wrong in the same way.  I have not yet encountered a case
> where literal interpretation gets it right and coercion gets it wrong,
> but nor can I say that there isn't such a case.
> -zefram

Thank you for the report. This is now fixed.


Thread Previous | Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About