2009-12-08 26 views
10

मैं एक पर्ल न्यूबी हूं,मैं पर्ल में 64-बिट अंकगणित कैसे कर सकता हूं?

क्या मैं बस पर्ल में 64-बिट अंकगणित का उपयोग कर सकता हूं?

उदाहरण

$operand1 = 0xFFFFFFFFFFFF; # 48 bit value 
$operand2 = 0xFFFFFFFFFFFF; # 48 bit value 

$Result = $operand1 * $operand2; 
  • के लिए मैं मूल रूप से पर्ल में int64_t के लिए एक प्रतिस्थापन के लिए देख रहा हूँ।
  • क्या उल्लेख करने का कोई तरीका है, यदि चर पर हस्ताक्षर या हस्ताक्षर किए गए हैं?
+1

तुम सच में 64-बिट गणित या बड़ी संख्या चाहते हैं? क्या आप इसे 64 बिट्स के बाद ओवरफ्लो करना चाहते हैं? –

उत्तर

13

हां, हालांकि आपको 64-बिट समर्थन के साथ पर्ल संकलित करने की आवश्यकता है।

+6

"बिगिन का उपयोग करें" यह सुनिश्चित करेगा कि यह हमेशा काम करता है। (यदि आप पूर्ण गति चाहते हैं, तो आपने गलत प्रोग्रामिंग भाषा चुनी है।) – jrockway

+4

पर्ल अक्सर जैव सूचना विज्ञान और अन्य क्षेत्रों में उच्च प्रदर्शन की आवश्यकता होती है। यदि आपकी संख्या 64 बिट्स के भीतर फिट होने के लिए निश्चित है, तो यह उत्तर बेहतर प्रदर्शन कोड बनाएगा। बस पर्ल के हाल के संस्करण का उपयोग करना सुनिश्चित करें, और आप इसे स्वयं संकलित करना चाहेंगे। "64-बिट समर्थन अब परिपक्व माना जाता है" http://dev.perl.org/perl5/news/2002/07/18/580ann/ – Colin

+7

64 बिट समर्थन के साथ भी, आपको ' पूर्णांक का उपयोग करें; 'एक (गोलाकार) फ़्लोटिंग पॉइंट परिणाम प्राप्त करने से बचने के लिए और इसके बजाय पूर्णांक (उच्च-बिट्स काटकर) पूर्णांक परिणाम प्राप्त करें। – ysth

5

हां, पर्ल स्वचालित रूप से आपके लिए बड़े पूर्णांक अंकगणित संभालता है। हालांकि, पर्ल हस्ताक्षरित और हस्ताक्षरित प्रकारों के बीच भेद प्रदान नहीं करता है (इसकी आवश्यकता नहीं है, क्योंकि बड़ी पूर्णांक सीमा पर निश्चित सीमाएं नहीं हैं)।

perlnumber मैनुअल पेज पर पर्ल द्वारा समर्थित विभिन्न संख्यात्मक प्रारूपों के बारे में अधिक जानकारी है।

+0

यह स्पष्ट नहीं है कि "हस्ताक्षरित और हस्ताक्षरित मूल्यों के बीच भेद" से आपका क्या मतलब है? – ysth

+0

ठीक है, मुझे "मूल्यों" के बजाय "प्रकार" कहा जाना चाहिए था। फिक्स्ड। –

10

bigint देखें:

पारदर्शी BigInteger रेंज ऑपरेटर .. अतिभारित रहे हैं को छोड़कर पर्ल के लिए समर्थन ...

सभी ऑपरेटरों (बुनियादी गणित संचालन सहित)। इंटीजर स्थिरांक उचित BigInts के रूप में बनाए जाते हैं।

फ़्लोटिंग पॉइंट स्थिरांक पूर्णांक के लिए छोटा कर दिया जाता है। सभी भागों और अभिव्यक्ति के परिणाम भी छोटा कर दिए जाते हैं।

integer के विपरीत, इस pragma पूर्णांक स्थिरांक है कि केवल उपलब्ध स्मृति और CPU समय से उनका आकार में सीमित हैं बनाता है ...

+0

+1 धन्यवाद, लेकिन मैं हेक्स() आदि ~~~ – Alphaneo

+0

अल्फानेओ जैसे कार्यों का उपयोग नहीं कर सका, वास्तव में आप '$ a = Math :: BigInt-> नया (" 0x "। $ Your_int)' और '$ कर सकते हैं a-> as_hex() ' – osgx

0

ध्यान रखें, पर्ल में 64 बिट गणित, एक है, लेकिन यह क्या प्रदर्शित किया जाता है sprintf% d% u और% s द्वारा, दूसरा है। वर्तमान perl संस्करण समस्याओं के बिना 64 बिट का समर्थन करता है, लेकिन sprintf% d प्रारूप नहीं,% b इसी तरह।

0

use bigint पूर्णांक पूर्ण प्रवाह के बिना पर्ल संभाल मनमानी आकार पूर्णांक को सही ढंग से बनाएगा।

उदा .:

use bigint; 
print 1 << 256; 

प्रिंट होगा:

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