Hi,

I just stumbled across this bug related to the equality between fraction and 
float:
https://pharo.fogbugz.com/f/cases/20488/x-y-iff-x-y-0-is-not-preserved-in-Pharo

In essence, the problem can be seen that by doing this, you get a ZeroDivide:
x := 0.1.
y := (1/10).
x = y ifFalse: [ 1 / (x - y) ]

The issue seems to come from the Float being turned to a Fraction, rather than 
the Fraction being turned into a Float:

Fraction(Number)>>adaptToFloat: rcvr andCompare: selector 
        "If I am involved in comparison with a Float, convert rcvr to a
        Fraction. This way, no bit is lost and comparison is exact."
        
        rcvr isFinite
                ifFalse: [
                        selector == #= ifTrue: [^false].
                        selector == #~= ifTrue: [^true].
                        rcvr isNaN ifTrue: [^ false].
                        (selector = #< or: [selector = #'<='])
                                ifTrue: [^ rcvr positive not].
                        (selector = #> or: [selector = #'>='])
                                ifTrue: [^ rcvr positive].
                        ^self error: 'unknow comparison selector'].

        ^ rcvr asTrueFraction perform: selector with: self

Even if the comment says that the comparison is exact, to me this is a bug 
because it seems to fail doing that. What do you think?

Cheers,
Doru


--
www.tudorgirba.com
www.feenk.com

"Problem solving should be focused on describing
the problem in a way that makes the solution obvious."





Reply via email to