8 ms·
Yeah, in CL the 0.1 is read syntax for a float (IEEE-754ish on most modern implementations.) If you want exactly 0.1, you’d have to say 1/10. The printer is pr
by fiddlerwoaroof 7y ago
Yeah, in CL the 0.1 is read syntax for a float (IEEE-754ish on most modern implementations.) If you want exactly 0.1, you’d have to say 1/10. The printer is probably cheating and rounding to the output you expect (I think Python 3 may do this now?)
Aside from financial applications, there’s very little reason to care about the trailing remainder.
- yellowapple 7y ago> The printer is probably cheating and rounding to the output you expect northrup@Topaz:~$ sbcl This is SBCL 1.5.8, an implementation of ANSI Common Lisp. More information about SBCL is available at <http://www.sbcl.org/>. SBCL is free software, provided as is, with absolutely no warranty. It is mostly in the public domain; some portions are provided under BSD-style licenses. See the CREDITS and COPYING files in the distribution for more information. * (= (+ 0.1 0.2) 0.3) T * (= (- (+ 0.1 0.2) 0.3) 0) T > Aside from financial applications "Financial applications" happen to be pretty common reasons for number crunching :)
- reitzensteinm 7y agoThis just means that 0.3 has the same internal representation as the result of (0.1 + 0.2). Internally, they're probably both 0.30000000000000004 (depending on precision), so an equality check returns true. It could also be that they're both 3/10 rational numbers, but given other tests in this thread that's likely not the case out the box.
- yellowapple 7y agonorthrup@Topaz:~$ sbcl This is SBCL 1.5.8, an implementation of ANSI Common Lisp. More information about SBCL is available at <http://www.sbcl.org/>. SBCL is free software, provided as is, with absolutely no warranty. It is mostly in the public domain; some portions are provided under BSD-style licenses. See the CREDITS and COPYING files in the distribution for more information. * (- 0.3 3/10) 0.0 * (= (- 0.3 3/10) 0) T * (= (- 3/10 0.3) 0) T * (= 0.3 3/10) NIL So yeah, 0.3 and 3/10 are definitely distinct, but still apparently net out to exactly 0 nonetheless.
- fiddlerwoaroof 7y agoCL-USER(3): (rational (+ 0.1 0.2)) 5033165/16777216 CL-USER(3): (rational 0.3) 5033165/16777216