Fraction equality and Float infinity problem

stéphane ducasse ducasse at iam.unibe.ch
Tue Mar 28 20:39:41 UTC 2006


Nicolas
Thanks for all these emails.
Keep going :)
For the compatibility between dialects we should not dream (else we  
would not have new calling initialize which is extremely cool as a  
teacher and
programmer too).
My feeling is that if we can improve squeak + document the problem  
with tests + evaluate how we can move without breaking too much
existing code then we win :)

Stef

> Hi Andreas,
>
> I agree we should answer false to equality test, unless exact  
> arithmetic.
> Note that (1/3) asFloat asFraction = (1/3) answer false since  
> asTrueFraction
> is used,
> but (1/2) asFloat asFraction = (1/2) is true, and that is exactly  
> how we like
> it.
>
> I think we should change coercion algorithm for equality test  
> relying on the
> asTrueFraction, but not touch + * - / since it would break lot of  
> code.
> This could be something like:
>
> Float>>adaptToFraction: rcvr andSend: selector
>     ^selector = #=
>         ifTrue: [[rcvr = self asTrueFraction]
>             "have to handle NaN and Infinity"
>             on: Error do: [:exc | exc return: false]]
>         ifFalse: [rcvr asFloat perform: selector with: self].
>
> same in Fraction>>adpatToFloat: rcvr andSend: selector
>
> This does also apply to < > <= >= ~= (some are inherited and need  
> not being
> handled, some must be handled the same way as =, except error  
> handling block
> because we cannot compare to NaN and should raise an error...).
> So we have to complexify above method a bit. If it becomes too  
> complex, we'll
> have to use more specialized selectors.
>
> Note that same stuff is to be done for Float/Integer coercion:
>   | a b c |
>   a := 16rFFFFFFFFFFFFF81.
>   b := 16rFFFFFFFFFFFFF82.
>   c := a asFloat.
>   {a = b.
>    a = c.
>    b = c.}
>
> Maybe we can also expect advices from other Smalltalkers, and make  
> various
> dialect response more uniform on such a Kernel subject.
> I went on vwnc mailing list with these, but no answer yet.
>
> Agree ?
>
> Nicolas
>
> Le Mardi 28 Mars 2006 12:45, Andreas Raab a écrit :
>> Wow. Great catch. Clearly, this is broken. I think we need to change
>> this coercion to something that deals with the issue properly (e.g.,
>> responding false to the comparison in question). Any ideas how to  
>> fix that?
>>
>> Cheers,
>>    - Andreas
>>
>
>
>




More information about the Squeak-dev mailing list