プログラミング かけ算で妙な現象
今日、仕事でSchemeを使ってたら、ときどき掛け算でおかしなことが起きました。
0.95を掛けたとき、おかしなことが頻発しました。
MIT Schemeでの実行結果をキャプチャーしました。
実行結果は、MIT SchemeもGaucheも一緒です。どう考えても、こんな結果になるのはおかしいと思うのですが。
(map (lambda (x) (* x 0.95)) '(1 2 3 4 5 6 7 8 9)) => (0.95 1.9 2.8499999999999996 3.8 4.75 5.699999999999999 6.6499999999999995 7.6 8.549999999999999) (map (lambda (x) (* x 0.95)) '(.1 .2 .3 .4 .5 .6 .7 .8 .9)) => (0.095 0.19 0.285 0.38 0.475 0.57 0.6649999999999999 0.76 0.855)
ちなみに、同じ計算をC言語で素朴に書くと、まともな答えが返ってきます(結果は省略)。
どうしてSchemeでは、このような結果が返ってくる???