2013-10-15 6 views
12

PythonはCで書かれており、Cプログラムは私がどのように扱われるか進数の割り当てについて疑問行わ実際にあるという事実のPythonの割り当てを実装していません。はどのようにCが大量

どのようにCプログラムは、非常に大きな進数(intまたはlongより大きい)のPythonの変数の代入を実装していますか?例えば

a=10000... # a=(10^1000) 

私は値がCプログラムは明らかにすることを、どのようにして、それは、メモリ内の多くの単語を取るように大きさであることを知っているPythonで実行していますか?

C内のすべての変数の型を持っていますが、Cコンパイルされたコードは、数がものになるかどうかは大きな知りません。

方法(パイソン)Cプログラムでは、その割り当てを処理していますか? (このような変数の操作や)

ここ
+1

あなたはPythonランタイムがC変数に値を割り当てると思いますか? – geoffspear

+0

質問を中に入れていますが、そのような場合はわかりません。Daenyth [post](http://stackoverflow.com/a/6101453/1982962)とDuncan [post](http://stackoverflow.com/a/)を参照してください。 6101687/1982962) –

+0

、他のポストが長いとint型超える非常に大きな数字を参照していない、これは私が求めていますと同じではありませんあなたの質問のタイトル – milton

答えて

5

は長整数表現するためにはCPython 2.7.5で使用されているC structです:あなたは、これをさらにdownload the source codeを探求し、取りたい場合は

/* Long integer representation. 
    The absolute value of a number is equal to 
     SUM(for i=0 through abs(ob_size)-1) ob_digit[i] * 2**(SHIFT*i) 
    Negative numbers are represented with ob_size < 0; 
    zero is represented by ob_size == 0. 
    In a normalized number, ob_digit[abs(ob_size)-1] (the most significant 
    digit) is never zero. Also, in all cases, for all valid i, 
     0 <= ob_digit[i] <= MASK. 
    The allocation function takes care of allocating extra memory 
    so that ob_digit[0] ... ob_digit[abs(ob_size)-1] are actually available. 

    CAUTION: Generic code manipulating subtypes of PyVarObject has to 
    aware that longs abuse ob_size's sign bit. 
*/ 

struct _longobject { 
     PyObject_VAR_HEAD 
     digit ob_digit[1]; 
}; 

を以下のファイルをご覧ください。

./Include/longintrepr.h 
./Include/longobject.h 
./Objects/longobject.c 

これは、あなたが知りたいと思われるすべての詳細を教えてくれます。 :)

+0

あなたのダウンロードリンクはもう機能していません –

+0

@PranavRaj:修正済み。 – NPE

-1

Pythonはパフォーマンス上の理由から、独自の大多数の実装を持っているかもしれないが、それは、そのようなGMPとして、サードパーティ任意精度ライブラリを使用することができます。

関連する問題