C、Python、Schemeの階乗プログラムでランダムな実験をしながら。Pythonなどの言語は、CのIntegralデータ制限をどのように克服しますか?
Cでは、 'unsigned long long'データ型を使用して、Iが印刷できる最大の階乗は65で、 '9223372036854775808'は、指定されたとおりに19桁の数字です。hereです。 Pythonで
、私はどのようにCPythonのは、これを達成ん、桁数が多いから構成されている999のような大きなとして19
よりもはるかに多くの数の階乗を見つけることができますか?それは 'octaword'のようなデータ型を使用していますか?
私はここでいくつかの基本的な事実を見逃しているかもしれません。だから、私はいくつかの洞察や読書の参考に感謝します。ありがとう!
更新:説明をいただきありがとうございます。つまり、CPythonはGNUの多精度ライブラリ(または他の同様のライブラリ)を使用していますか?
更新2:ソースでPythonの「bignum」実装を探しています。正確にそれはどこですか?ここはhttp://svn.python.org/view/python/trunk/Objects/longobject.c?view=markupです。ありがとうBaishampayan。
私はより良い質問かもしれないが、Pythonはbignumをどのように使用してパフォーマンスを低下させることなく使用するのだろうか?それは32ビットintを使用し、必要なときにbignumsにそれらを促進しますか?これは積分演算のたびにチェックを意味しますか? –
CPython 2.xにはintとlongがあります。 intはCのintと似ていて、longはbignumです。それは必要なときに促進します。 CPython 3.x以来、彼らはシングルタイプとしてマージし、より遅い性能を持っています。 – kcwu
@kcwu、2つではなく1つのデータ型だからといって、パフォーマンスが悪いというわけではありません。 –