But why does 3.225 round differently than 4.225? I see that this is different:
> (> 3.225 #e3.225) #t but I would have thought that the integer part wouldn't affect anything here since floats have those parts separate? I thought? Robby On Thu, Nov 29, 2012 at 8:55 AM, Matthew Flatt <mfl...@cs.utah.edu> wrote: > At Thu, 29 Nov 2012 14:44:38 +0000, Greg Graham wrote: >> I am trying to report GPA calculation results to 2 decimal places, so I >> thought >> real->decimal-string would do the trick. However, the following behavior >> surprised me: >> >> > (real->decimal-string 3.225 2) >> "3.23" >> > (real->decimal-string 4.225 2) >> "4.22" >> >> I would like the second answer to be "4.23", which is what a student would >> expect to see if they did the calculations themselves. The documentation for >> real->decimal-string says that it first converts the argument to an exact >> number. I suspect the problem has something to do with this: >> >> > (inexact->exact 4.225) >> 4 126663739519795/562949953421312 >> > (/ 126663739519795.0 562949953421312.0) >> 0.22499999999999964 >> >> Is there another rounding function that would just round the floating point >> without going through the conversion to exact? > > There are a couple of issues here. > > First, the inexact number 4.225 is actually slightly smaller than the > exact value 4.225: > > > (< 4.225 #e4.225) > #t > > (pretty-print-exact-as-decimal #t) > > (inexact->exact 4.225) > 4.2249999999999996447286321199499070644378662109375 > > So, that's one reason to argue that "4.22" is the right answer. > > > Even if you use the exact number 4.225, though, you get a "2" as the > last digit: > > > (real->decimal-string #e4.225 2) > "4.22" > > That's because rounding in Racket is to "even" --- a different > convention than the one taught to most students, but one that it often > preferred in computing (because it often reduces accumulated error, as I > understand it). > > ____________________ > Racket Users list: > http://lists.racket-lang.org/users ____________________ Racket Users list: http://lists.racket-lang.org/users