2010-02-09 9 views
19

पायथन में सिंगल-प्रेसिजन फ्लोटिंग पॉइंट का अनुकरण करने का सबसे अच्छा तरीका क्या है? (या उस मामले के लिए अन्य फ्लोटिंग पॉइंट प्रारूप?) बस ctypes का उपयोग करें?पायथन में एकल परिशुद्धता फ्लोटिंग पॉइंट का अनुकरण करने का सही तरीका?

+2

"अनुकरण" से आपका क्या मतलब है? बाइनरी ब्लब्स से फ्लोट पढ़ें? एकल-परिशुद्धता में गणित निष्पादित करें और एक ही भाषा के समान परिणाम प्राप्त करें? (यदि उत्तरार्द्ध, ध्यान दें कि x86 पर सी में "फ्लोट" गणित वास्तव में 80-बिट में मूल्यांकन किया जाता है और इसे संग्रहीत होने पर 32-बिट तक घटा दिया जाता है।) –

उत्तर

3

आपके आवेदन सूट सरणियों/मैट्रिक्स हैं, तो आप के साथ float32

11

तो numpy (अन्य उत्तर के उत्कृष्ट सुझाव) आप (के लिए लागू नहीं है numpy उपयोग कर सकते हैं जैसे, क्योंकि आप एक वातावरण में हैं कि अनुमति नहीं है मनमानी तृतीय-पक्ष एक्सटेंशन), ​​पाइथन मानक लाइब्रेरी में array मॉड्यूल भी ठीक है - टाइप कोड 'f' आपको 32-बिट फ्लोट देता है। उन और (सामान्य) डबल परिशुद्धता फ्लोट के अलावा, "अन्य फ़्लोटिंग पॉइंट प्रारूपों" के लिए बहुत कुछ नहीं है - आपके मन में क्या था? (उदाहरण के लिए gmpy बहुत अधिक, मनमानी बिट आकार के साथ फ्लोट के लिए जीएमपी का मामूली समर्थन प्रदान करता है - लेकिन यह वास्तव में मामूली है, उदाहरण के लिए, कोई ट्रिग फ़ंक्शन नहीं)।

6

मानक पुस्तकालय से ctypes.c_float के बारे में कैसे?

1

32-बिट फ्लोट की परिशुद्धता के लिए 64-बिट फ्लोट को छीनने के लिए पायथन के struct मॉड्यूल का उपयोग करना संभव है।

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

>>> x = 1.1122334455667788 
>>> x 
1.1122334455667788 
>>> struct.unpack('f', struct.pack('f', x))[0] 
1.1122334003448486 

केवल 32-बिट तैरता साथ गणित करने के लिए, आप हर गणित आपरेशन के परिणाम को यह काट-छांट आपरेशन लागू करने के लिए की आवश्यकता होगी।

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