2014-04-23 4 views
6

पायथन एक "बिग्नम" प्रकार प्रदान करता है जिसे "लंबा" कहा जाता है जो मनमाने ढंग से बड़ी संख्या का प्रतिनिधित्व कर सकता है। इस प्रकार का आंतरिक प्रतिनिधित्व क्या है?बिग्नम आंतरिक रूप से कैसे प्रदर्शित होते हैं?

मैं भाग में पूछता हूं क्योंकि मुझे उत्सुकता है कि इन नंबरों पर कौन से ऑपरेशन विशेष रूप से तेज़ या धीमे हो सकते हैं। उदाहरण के लिए, गुणा या विभाजन की तुलना में विशेष रूप से तेजी से स्थानांतरित हो रहा है (जैसा कि यह "नियमित" स्याही के लिए है)?

+0

यह दिलचस्प है। आपको इसका परीक्षण करना चाहिए: प्रत्येक 'int' और 'long' दोनों पर एक सौ हजार संचालन करें, और देखें कि कौन तेज़ हैं! – slezica

+0

यह सिर्फ एक अनुमान है, लेकिन यह कार्यान्वयन पर निर्भर करता है और इसके खिलाफ मनमाने ढंग से सटीक पुस्तकालय के संबंध में यह लिंक होना चाहिए। – Hyperboreus

+1

उदा। देखें http://stackoverflow.com/a/870429/297323 –

उत्तर

3

सीपीथन के मनमाने ढंग से सटीक पूर्णांक बाइनरी digits की एक सरणी संग्रहीत किए जाते हैं। प्रत्येक digit में या तो 15 या 30 बिट होते हैं। जोड़, घटाव, और बिट बदलाव सभी ओ (एन) हैं। गुणा (बड़े पर्याप्त मूल्यों के लिए) Karatsuba multiplication का उपयोग करता है जो ओ (एन ** 1.585) है। डिवीजन अभी भी शास्त्रीय ओ (एन ** 2) एल्गोरिदम का उपयोग करता है।

0

ठीक है, मैंने यह लिखा है। मुझे यकीन नहीं है कि यह कितना अच्छा है, लेकिन आप इसे अधिक परिष्कृत और पूर्ण बेंचमार्क के लिए प्रारंभिक बिंदु के रूप में उपयोग कर सकते हैं।

import timeit 

def timef(f, *args): 
    return timeit.timeit(lambda: f(*args), number = 1000000) # repetitions 


tests = { 
    'addition'  : lambda x: x + 17, 
    'substraction' : lambda x: x - 17, 
    'multiplication': lambda x: x * 17, 
    'division'  : lambda x: x/17, 
    'float division': lambda x: x/17.0 
} 


for name, f in tests.items(): 
    print 'int {0}'.format(name).ljust(20), timef(f, 0) 
    print 'long {0}'.format(name).ljust(20), timef(f, 10 ** 50) 
    print 

मैं क्या दिखाई दे रही है नहीं एक बहुत तेजी से कि int() संचालन वास्तव में तेजी से हो रहा है, लेकिन।

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