I don't think it makes sense to compare floating point numbers to other types of numbers with #=... there's a world of approximations and other factors hiding behind #=, and the occasional true answer confuses more than it helps. On top of that, then you get x = y => x hash = y hash, and so the hash of floating point values "has" to be synchronized with integers, fractions, scaled decimals, etc... _what a mess_...
Yes, that's true, hash gets more complex. But then, this has been discussed before:
{1/2 < 0.5. 1/2 = 0.5. 1/2 > 0.5} - > #(false false false).
IOW, they are unordered. Are we ready to lose ordering of numbers? Practically, this would have big impacts on code base.
IME, that's because loose code appears to work. What enables that loose code to work is the loose mixed mode arithmetic. I could understand integers and fractions. Adding floating point to the mix stops making as much sense to me. Equality between floating point numbers does make sense. Equality between floating point numbers and scaled decimals or fractions... in general, I don't see how they could make sense. I'd rather see the scaled decimals and fractions explicitly converted to floating point numbers, following a well defined procedure, and then compared... Andres.
I'm pretty sure a Squeak/Pharo image wouldn't survive that long to such a change (well I tried it, the Pharo3.0 image survives, but Graphics are badly broken as I expected).
That's allways what made me favour casual equality to universal inequality.
Also should 0.1 = 0.1 ? In case those two floats have been produced by different path, different approximations they might not be equal... (| a b | a := 0.1. b := 1.0e-20. a+b=a.) I also prefer casual equality there too. Those two mathematical expressions a+b and a are different but both floating point expressions share same floating point approximation, that's all what really counts because in the end, we cannot distinguish an exact from an inexact Float, nor two inexact Float. We lost the history...
Also, the inexact flag is not attached to a Float, it's only the result of an operation. Statistically, it would waste one bit for nothing, most floats are the result of an inexact operation. But who knows, both might be the result of exact operations too ;)
On 7/11/14 10:46 , stepharo wrote:
I suggest you to read the Small number chapter of the Deep into Pharo.
Stef
On 11/7/14 15:53, Natalia Tymchuk wrote:
Hello. I found interesting thing: Why it is like this?
Best regards, Natalia