3

私はPythonが任意の大きな整数を処理できることを知っていますが、科学的記数法を使用するときになぜそれが私にそれを与えないのですか?1e23が10**23と異なるのはなぜですか?

Python 2.7.3 (default, Aug  1 2012, 05:14:39) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> for x in range(30):
...   x1 = eval('long(1e{})'.format(x))
...   x2 = eval('long(1{})'.format('0' * x))
...   print x1, 'OK' if x1 == x2 else 'YUCK!'
... 
1 OK
10 OK
100 OK
1000 OK
10000 OK
100000 OK
1000000 OK
10000000 OK
100000000 OK
1000000000 OK
10000000000 OK
100000000000 OK
1000000000000 OK
10000000000000 OK
100000000000000 OK
1000000000000000 OK
10000000000000000 OK
100000000000000000 OK
1000000000000000000 OK
10000000000000000000 OK
100000000000000000000 OK
1000000000000000000000 OK
10000000000000000000000 OK
99999999999999991611392 YUCK!
999999999999999983222784 YUCK!
10000000000000000905969664 YUCK!
100000000000000004764729344 YUCK!
1000000000000000013287555072 YUCK!
9999999999999999583119736832 YUCK!
99999999999999991433150857216 YUCK!
4

2 に答える 2

5

1e23は浮動小数点数として解釈されます10**23が、は整数の累乗(つまり整数)です。

于 2012-10-22T02:52:17.353 に答える
3

Python の浮動小数点型は、システム アーキテクチャ固有の数値を計算に使用します。通常は、ここで定義されている 64 ビットの浮動小数点を使用します : http://www.ee.unb.ca/tervo/ee6373/IEEE64.htmデフォルトで他の浮動小数点データ型を使用します-しかし、Pythonが実行されているアーキテクチャに F>p> 数値処理の特異性がある場合、それらはPythonに表示されることを知っています-したがって、x86ハードウェアで実行されているPythonプログラムに違いがある可能性がありますPPC、ARM、またはその他の CPU で実行されているもの。

ただし、Python で任意精度の 10 進数を使用したい場合は、モジュール Decimal で可能です。最近リリースされた Python 3.3 の時点で、10 進数の速度はネイティブの浮動小数点数の速度に匹敵します (Python プログラム内 - SIMD 命令などの FP スピードアップを使用できるネイティブ コードの方がはるかに高速です)。

于 2012-10-22T03:00:06.697 に答える