[Pharo-dev] float & fraction equality bug
nicolas.cellier.aka.nice at gmail.com
Thu Nov 9 09:36:09 EST 2017
Nope, not a bug.
If you use Float, then you have to know that (x -y) isZero and (x = y) are
two different things.
Example; Float infinity
In your case you want to protect against (x-y) isZero, so just do that.
2017-11-09 15:15 GMT+01:00 Tudor Girba <tudor at tudorgirba.com>:
> I just stumbled across this bug related to the equality between fraction
> and float:
> In essence, the problem can be seen that by doing this, you get a
> 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?
> "Problem solving should be focused on describing
> the problem in a way that makes the solution obvious."
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Pharo-dev