このBlogは移転しました。今後は aish.dev を御覧ください。

Macbook Air OS X 10.8.2 のふしぎ

Python浮動小数点数を使って大きな値の計算をすると、

>>> 1e100 * 1e100
1e+200
>>> 1e200 * 1e200
inf
>>> 1e200 ** 1e200
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OverflowError: (34, 'Numerical result out of range')
>>> 1e1000 ** 1e1000
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  OverflowError: (34, 'Numerical result out of range')

こんな感じになる。手元の Linux とかWindowsCygwinでも同じ結果になる。

同じ演算を、買ったばかりの Macbook Air / OS X 10.8.2、13インチ液晶/ 2 GHz Intel Core i7/メモリ8G/SSD 512G で実行すると、次のようになる。

>>> 1e100 * 1e100
1e+200
>>> 1e200 * 1e200
inf
>>> 1e200 ** 1e200
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  OverflowError: (34, 'Result too large')
>>> 1e1000 ** 1e1000
inf

途中までは同じだが、最後の 1e1000 ** 1e10000 が例外ではなく、inf となっている。Python 2.7.3/3.3 どちらでも同じ結果となった。なにか評価の順番でも違うのかもしれないが、Macのビルド環境を整えるのはちょっとめんどくさそうなので、原因は調査していない。

なお、前述の動作環境で、"13インチ液晶/ 2 GHz Intel Core i7/メモリ8G/SSD 512G" の部分は、たんなるスペック自慢である。特に意味は無いので注意されたい。