2013-10-15 3 views
12

तथ्य यह है कि पायथन सी में लिखा गया है और वास्तव में एक सी प्रोग्राम ने मुझे आश्चर्यचकित कर दिया है कि दशमलव संख्या असाइनमेंट कैसे प्रबंधित किया जाता है।सी बड़ी संख्याओं के पाइथन असाइनमेंट को कैसे लागू करता है

एक सी प्रोग्राम एक बहुत बड़े दशमलव संख्या (int या long से बड़ा) के पायथन वैरिएबल असाइनमेंट को कैसे कार्यान्वित करता है?

उदाहरण के लिए:

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

जब अजगर में चल रहा मुझे पता है कि मूल्य इतना बड़ा है कि यह स्मृति में कई शब्दों लगता है, इसलिए सी कार्यक्रम स्पष्ट रूप से है, लेकिन कैसे करता है?

सी में प्रत्येक चर में एक प्रकार है, लेकिन सी संकलित कोड यह नहीं जानता कि संख्या कितनी बड़ी होगी।

(पायथन) सी प्रोग्राम उस असाइनमेंट को कैसे संभालता है? (और इस तरह चर पर कार्रवाई)

+1

आपको क्या लगता है कि पाइथन रनटाइम एक चर चर के मान को असाइन करता है? – geoffspear

+0

इंटरस्टिंग प्रश्न लेकिन मुझे यकीन नहीं है कि यह मामला है, कृपया डेनथ [पोस्ट] देखें (http://stackoverflow.com/a/6101453/1982962) और डंकन [पोस्ट] (http://stackoverflow.com/a/ 6101687/1982962) –

+0

कृपया, अपने प्रश्न शीर्षक – milton

उत्तर

5

यहाँ सी struct कि एक लंबे पूर्णांक प्रतिनिधित्व करने के लिए CPython 2.7.5 में प्रयोग किया जाता है:

/* 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]; 
}; 

आप इस आगे, download the source code का पता लगाने और लेने के लिए चाहते हैं, तो निम्न फ़ाइलों पर एक नज़र:

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

यह आपको हर विवरण बताएगा जो आप संभवतः जानना चाहते हैं। :)

+0

आपका डाउनलोड लिंक अब काम नहीं कर रहा है –

+0

@PranavRaj: फिक्स्ड। – NPE

-1

पाइथन के प्रदर्शन कारणों से स्वयं का बड़ा संख्या कार्यान्वयन हो सकता है, लेकिन यह GMP जैसे किसी तीसरे पक्ष के मनमाना सटीक पुस्तकालय का उपयोग कर सकता है।

संबंधित मुद्दे