On 11/10/2017 9:39 AM, Florin Mateoc wrote: > I think we should also mention that the literal 0.1 is not the number in base > ten that we all learned in school, despite > both using base 10 for printing and despite both being printed the same way - > this is the crux of the problem. > > But there is such a number in the system, called ScaledDecimal, for which the > equality stands: > > 0.1s = (1/10) > > We could have chosen ScaledDecimal as backing for our decimal literals (the > literal 0.1 being translated by the > parser/compiler as a ScaledDecimal and only have say the literal 0.1f being > translated to an imprecise float) and we > would not have had this problem. We could probably still do it > > Florin
Sorry to follow up on myself, but the more I think about it, the more I like my own proposal It would make the choice/compromise to be fast but imprecise explicit > > On 11/10/2017 7:18 AM, Tudor Girba wrote: >> Thanks indeed for the summary. I like this. >> >> Doru >> >> >>> On Nov 10, 2017, at 12:59 PM, raffaello.giulie...@lifeware.ch wrote: >>> >>> I would like to summarize my perspective of what emerged from the >>> discussions in the "float & fraction equality bug" trail. >>> >>> The topic is all about mixed operations when both Fractions and Floats >>> are involved in the mix and can be restated as the question of whether >>> it is better to automagically convert the Float to a Fraction or the >>> Fraction to a Float before performing the operation. >>> >>> AFAIK, Pharo currently implements a dual-conversion strategy: >>> (1) it applies Float->Fraction for comparison like =, <=, etc. >>> (2) it applies Fraction->Float for operations like +, *, etc. >>> >>> The reason for (1) is preservation of = as an equivalence and of <= as a >>> total ordering. This is an important point for most Smalltalkers. >>> >>> The reason for (2), however, is dictated by a supposedly better >>> performance. While it is true that Floats perform better than Fractions, >>> I'm not sure that it makes a noticeable difference in everyday uses. >>> Further, the Fraction->Float conversion might even cost more than the >>> gain of using Floats for the real work, the operation itself. The >>> conversion Float->Fraction, on the contrary, is easier. >>> >>> But the major disadvantage of (2) is that it enters the world of limited >>> precision computation (e.g., Floats), which is much harder to >>> understand, less intuitive, more surprising for most of us. >>> >>> >>> >>> So, it might be worthwhile to suppress (2) and consistently apply >>> Float->Fraction conversions whenever needed. It won't make daily >>> computations noticeably slower and helps in preserving more enjoyable >>> properties than the current dual-conversion regime. >>> >>> Also, it won't prevent the numericists or other practitioners to do >>> floating point computations in mixed contexts: just apply explicit >>> Fraction->Float conversions when so desired. >>> >>> This will be at odd with other Smalltalk implementations but might end >>> up being a safer environment. >>> >>> >>> >>> I would like to thank Nicolas in particular for being so quick in >>> answering back and for the good points he raised. >>> >>> Greetings >>> Raffaello >>> >> -- >> www.tudorgirba.com >> www.feenk.com >> >> "Yesterday is a fact. >> Tomorrow is a possibility. >> Today is a challenge." >> >> >> >> >> >>