[plt-scheme] question about Scheme numbers
Danny Yoo wrote:
> Peter wrote:
>>> (square (sqrt 3))
>>
>> 2.9999999999999996
>>
>> How come?
>
> http://htdp.org/2003-09-26/Book/curriculum-Z-H-41.html#node_chap_33
The short version:
(sqrt 3) can not be represented exactly using floating point numbers,
so instead the result of (sqrt 3) is the closest representable number.
Squaring a number close to (sqrt 3) results in a number close to 3
namely 2.9999999999999996.
The same thing happens internally on a calculator. Calculators cheat
though, so it is hard to notice. Internally they use, say, 2 digits more
than they display. That is, the above result would be displayed
as 3.00000000000000. Try (sqrt(3.0))^2*10000 on a calculator to see the
same phenomenon.
If you are interested in floating point, then besides the chapter Danny
links to, read Goldberg's "What Every Computer Scientist Should Know About
Floating-Point Arithmetic".
<http://docs.sun.com/source/806-3568/ncg_goldberg.html>
--
Jens Axel Søgaard
<http://www.scheme.dk/blog/>