数学問題


計算結果が awk だけ異なると言うものです。

$ echo "111111111 * 111111111" | bc -l
12345678987654321

$ perl -le 'print 111111111 * 111111111'
12345678987654321

$ python -c "print 111111111 * 111111111"
12345678987654321

(bash/zsh - same results)
$ echo $((111111111 * 111111111))
12345678987654321

$ awk 'BEGIN {printf "%.0f", '"111111111 * 111111111"'}'
12345678987654320

これは awk が倍精度浮動小数点で扱うことが原因です。

いろいろ試した結果が載っていて興味深いです。

on cygwin on Windows XP:

$ gawk 'BEGIN {print (111111111*111111111); exit}'
12345678987654320

on Solaris:

$ /usr/bin/awk 'BEGIN {print (111111111*111111111); exit}'
12345678987654320
$ nawk 'BEGIN {print (111111111*111111111); exit}'
12345678987654320
$ /usr/xpg4/bin/awk 'BEGIN {print (111111111*111111111); exit}'
12345678987654321
$ gawk 'BEGIN {print (111111111*111111111); exit}'
1.23457e+16
$ gawk 'BEGIN {printf "%.0f\n", (111111111*111111111); exit}'
12345678987654320

mawk, nawk もダメなので、Linux 上だと xgawk だけ?