note
syphilis
<I>Coerces both arguments to Numeric (if necessary)...</I><br><br>
That's an unfortunate choice, IMO.
<br><br><I>coercion from Rat to Num can result in loss of precision</I><br><br>
And that's the reason that I don't like that choice.
If instead, the Num was coerced to Rat, then there would be no loss of precision.
<br><br><I>your python example does much the same...</I><br><br>
If that were so, then I think the following python3 one-liner would print "True":
<c>
$ python3 -c 'from fractions import Fraction; print (Fraction(1,10) == 0.1);'
False
</c>
Even though the Fraction (Rat) 1/10 coerces to the float (Num) 0.1e0, python3 still recognizes that the 2 values are not equivalent.
<br><br>My only other experience with comparisons between rational types and floating point types is in the [https://www.mpfr.org/mpfr-current/mpfr.html|mpfr library] where, like python3, the comparison is made between the "Rat" (mpq_t) and the exact rational value of the "Num" (mpfr_t) using the [https://www.mpfr.org/mpfr-current/mpfr.html#index-mpfr_005fcmp_005fq|mpfr_cmp_q] function.
<br>The [https://gmplib.org/manual/|gmp library] has both a "Num" (mpf_t) and "Rat" (mpq_t) type, but doesn't provide any public functions for directly comparing the 2 types. It's therefore up to the user to come up with the comparison routines.
<br><br>Anyway, if raku users are happy with the approach taken then there's not much point in complaining about it.
<br>(And I haven't yet encountered any raku users that are unhappy with that current approach.)
<br><br>Cheers,<br>Rob
11137153
11137452