1/10 cannot be represented as Float without loss of precision. So even though (1/10) asFloat gives you 0.1, the reverse is not possible.
Floating point is a binary (as in base 2 representation), not a decimal (base 10) representation.
Consider
(1/8) asFloat asTrueFraction.
which is reversible.
x := 0.125.
y := (1/8).
x = y ifFalse: [ 1 / (x - y) ].
You can see that a bit in the binary representation view:

Sven
On 9 Nov 2017, at 15:15, Tudor Girba <tudor@tudorgirba.com> wrote:
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."