僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。
まず python。
$ python -c 'print 0.1 + 0.1 + 0.1 - 0.3' 5.55111512313e-17
次に perl。
$ perl -e 'print 0.1 + 0.1 + 0.1 - 0.3, "\n";' 5.55111512312578e-17
ruby はperlと全く同じ(式も値も)。なので省略。
それから拙速のC。
$ cat f.c #include<stdio.h> int main() { float a, b; a = b = 0; a = 0.1; b = 0.3; printf("%1.1f and %1.1f and %1.1f minus %1.1f is %1.29f\n" \ , a, a, a, b, a + a + a - b); return 0; } ./f 0.1 and 0.1 and 0.1 minus 0.3 is -0.00000000745058059692382812500
おまけに(?) bc(1)。
0.1 + 0.1 + 0.1 - 0.3 で 0 が返った。
$ ONE="0.1000000000000" $ THREE="0.3000000000000" $ echo $ONE + $ONE + $ONE - $THREE | bc 0
念のため、末尾に 1 とか 7 とか入れてみたが、それはちゃんと反映された。
リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。