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
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|