2009/7/7 Hernan Wilkinson <[email protected]>:
> ok, but can you be sure that your objects are not handling floats? maybe the
> same code handles floats when you want speed and fractions when you want
> precision, I remember we did that once but I don't remember if we had to
> compare the numbers...
> I understand your point and I agree with you that erratic behavior should be
> avoided as much as possible, new programmers always get confused when two
> floats print the same but return false when compared, but do you agree with
> me that this new behavior make floats "less polymorphic" with numbers? and
> code more odd?... you see, people will have the same question as me, why
> (13/10) = 1.3 returns false but (1/2) = 0.5 returns true?
> Maybe the solution has to be more drastic, and if we want to avoid people
> for comparing floats for equality, just not let them or return false
> always... or take the other road as Smalltalk had after now, that is: make
> the implementation detail as hide as possible, and if the programmer really
> cares about representation problems let him compare the numbers with a
> difference...
> Smalltalk has almost 30 years old and I have not seen any big problem
> related to comparing numbers, so why changing that? what do we gain with the
> change?... I'm still not sure that this change is for the better :-)
>
>

Well, we are going to lack of arguments and just repeat ourselves :)
It is for the better because it makes comparison a full order relation
ship and equality transitive.

| a b c |
a := 13/10.
b := a asFloat.
c := b asTrueFraction.
a < c
self asssert: (a = b) & (b = c) ==> (a == c).
self asssert: (a < c) & (b = c) ==> (a < b).

It is also better because your learn sooner to not be surpised by
1.3*1.3 ~= 1.69.

You should know that lispers (lots of grey bearded) were better
behaved than us, long before us.
See http://www.lispworks.com/documentation/lcl50/aug/aug-170.html
That's not a definitive argument, but a good clue.

Concerning (1/2) ~= 0.5, Andres suggested that once, why not. This is
explicitely possible to implement Scheme with this rule.

I gave you some examples that are not hypothetical: I've been caught
15 years ago with this kind of bad behaviour.
I now would like to see real examples rather than just expectations
based on bad habits.

Nicolas

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

Reply via email to