2012-04-05 13 views
1

私はPythonで非常に大きな数字を使うつもりですが、Pythonが非常に大きな数字を処理できるかどうか疑問です。数字には3,000までのゼロが入ります。Pythonで9,000桁以上の大きな数字を保存する

そして、3,000のゼロを使用して1のバイト数はどのくらいですか?

第3の質問ですが、数値を整数としてファイルに保存するにはどうすればいいですか?

+0

あなたが1つの有効数字を取った場合、あなたがする必要があるのは、指数を保存することだけです。 1つの整数は簡単に十分に大きくなります。 –

+1

ちょうど好奇心から、あなたが取り組んでいる問題は何ですか? 10^3000は非常に大きな数(10^2920の宇宙の〜の原子数)です。 – georg

+0

@ thg435 - それは数学のいくつかの曖昧な枝でなければならない。私はそれらの多くのゼロを必要とする宇宙論(または亜種)を知らない。 –

答えて

7

パイソンことができますlong型を使用して任意の長整数を格納し、さらにlongliteそれらにLを追加して0Lは、0int)とは対照的に、longのゼロである。さらに、計算の結果が大きすぎてintで表すことができない場合は、intからlongに数値を自動的に「昇格」します。 longは本格的な数値型で、すべてのPython数値演算と互換性があります。

整数以上が必要な場合は、Decimal型の任意のサイズと精度の実数を提供するタイプのモジュールが必要です。バイナリ浮動小数点表現に固有の問題はありません。

longDecimal双方の欠点は、後者は、ネイティブハードウェアサポートを持っているので、それらは、それぞれ、intfloatよりも低速であることです。しかし、数学で数学をややゆっくりとすると、そのような数を全く使うことができなくなります。

サイズについては、intオブジェクトは32ビットPythonでは12バイトです。これは、内部的には32ビットの量であるため、一見大きいサイズです。これは、Pythonの「すべてはオブジェクトです」アプローチによるものです。 (私は信じていますが、私には言いませんが、値の4バイト、インスタンスから型へのポインタのための4バイト、参照カウンタのための4バイトがあります。これは、オブジェクトがガーベジ-collected。これらのフィールドは、Pythonの64ビットバージョンに大きくしてもよい。)

それらは数(プラスオブジェクトオーバーヘッドに基づいて変わるようlongの大きさ)は、変化するが、任意long値の大きさとすることができますsys.getsizeof()を使用して決定される。

+0

自分で試してみてください: 'print '(' 3 '+' 0 '* 3000)' – Wilduck

+0

ありがとう、それはちょっと高いと思われる1356と言います。 –

4

大きい数行います)

print sys.getsizeof(x) 

は、(文字列なしでファイルに書き込みます:

x = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 

をそしてそれがどのように多くのバイトを参照

fd = open("file.txt", "wb") 
fd.write("%u" %x) 
fd.close() 
関連する問題