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
