2009/7/7 Ignacio Vivona <[email protected]>:
> Why not the opposite? The default behavior is 13/10 = 1.3 yields true and
> the new behavior (13/10) asFloat = 1.3 equals false.
> This kind of behavior is a real pain in languages like java, i are you
> bringing this to the smalltalk world?
>

Hi Ignacio.
If you'd provide a rationale for the behaviour you're proposing we could argue.
Otherwise my answer would just be speculation.

If 1.3 is 13/10 explain why 1.3*1.3 is not 169/100.

As I told before, you should better use ScaledDecimals if you rely on
such assertions.

Cheers

Nicolas

> 2009/7/7 Hernan Wilkinson <[email protected]>
>>
>> Hi Nicolas,
>>  thank you for your answer. I'm aware of the float representation
>> problems. But this new behavior sounds more confusing, at least to me... I
>> mean, 1.3 is not a number with representation problems so why do we have to
>> make this difference? I understand you are trying to avoid the problems
>> sometimes floats generate, but I think that doing so we are loosing some
>> abstraction from the number representation type.
>>   Correct me if I wrong, but doesn't this new behavior means that always,
>> in any number comparison, we need to coerse the number to float? Because 1.3
>> asFraction = (13/10) returns false but 1.3 = (13/10) asFloat returns true...
>> I mean, if we have a = b and the values of those variables are calculated by
>> some process such that a is 1.3 and b is 13/10, the comparison will not
>> work, so we need to explicitly write "a asFloat = b asFloat" just in case
>> any of those variables reference a float, even though none of them will ever
>> do... but then "(1/2) = 0.5" returns true... I don't know, I don't like it
>> that much...
>>
>> On Tue, Jul 7, 2009 at 3:56 PM, Nicolas Cellier
>> <[email protected]> wrote:
>>>
>>> Hi Hernan,
>>> This is the new Behavior of Float comparison and it is desired.
>>>
>>> 1) 1.3 is represented in machine as
>>> (1.3 significandAsInteger printStringRadix: 2) , '.0e' , (1.3 exponent
>>> - Float precision + 1) printString.
>>> -> '2r10100110011001100110011001100110011001100110011001101.0e-52'
>>>
>>> Or if you prefer:
>>> (1.3 asTrueFraction numerator printStringBase: 2) , '/' , (1.3
>>> asTrueFraction denominator printStringBase: 2).
>>> ->
>>> '10100110011001100110011001100110011001100110011001101/10000000000000000000000000000000000000000000000000000'
>>>
>>> As you can see, this is quite different from 13/10.
>>>
>>> However, you can test (13/10) asFloat = 1.3 and that happens to be
>>> true, but that won't always be true.
>>>
>>> 2) comparing Float with strict equality is a dangerous game. Floating
>>> point operation are inherently inexact and thus asserting an exact
>>> equality is considered a bad practice.
>>>
>>> 3) basing comparisons and equality tests on inexact arithmetic rather
>>> than on exact arithmetic leads to weird behaviours. See
>>> http://bugs.squeak.org/view.php?id=3374
>>>
>>>
>>> So i do not consider this fragment of code alone as a bug but as a
>>> feature.
>>> There might be some code depending on the old behaviour that can
>>> eventually break.
>>> If you have such an example in true application, I'm interested.
>>> I think we'd better fix such code to not rely on exact equality...
>>>
>>> Cheers.
>>>
>>> Nicolas
>>>
>>>
>>>
>>> 2009/7/7 Hernan Wilkinson <[email protected]>:
>>> > I added this new issue that happens on the latest image.
>>> > I'm posting it here because I think it is an important bug because it
>>> > affects the number model.
>>> > The problem is related with all fractions who's denominator is not
>>> > power of
>>> > two. (130/100 = 1.3 or 1/5 = 0.2, etc)
>>> > (See
>>> >
>>> > Float>>adaptToFraction: rcvr andCompare: selector where it does
>>> >    ....
>>> >    "Try to avoid asTrueFraction because it can cost"
>>> >     selector == #= ifTrue: [
>>> >       rcvr denominator isPowerOfTwo ifFalse: [^false]].
>>> >
>>> >    ...)
>>> >
>>> >
>>> > Hernan.
>>> >
>>> >
>>> >
>>> > _______________________________________________
>>> > Pharo-project mailing list
>>> > [email protected]
>>> > http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>> >
>>>
>>> _______________________________________________
>>> Pharo-project mailing list
>>> [email protected]
>>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>>
>>
>> _______________________________________________
>> Pharo-project mailing list
>> [email protected]
>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
>
>
> --
> Hope is for sissies (Gregory House, M.D.)
>
> _______________________________________________
> Pharo-project mailing list
> [email protected]
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>

_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

Reply via email to