トップ «前の日記(2010-04-05(Mon)) 最新 次の日記(2010-04-07(Wed))» 編集

屑俺日記

僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。


2010-04-06(Tue) 天候不明

ゼロになるとは限らない

まず 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や内容が変った場合はあしからず。

index.htmlは ここから。