आमतौर पर कई शब्दों का उपयोग करके bignums लागू किया जाता है, लेकिन मैं शब्द आकार को यथासंभव पोर्टेबल चुनना चाहता हूं। ऐसा लगता है कि यह अधिक कठिन है - std::uint64_t
कई 32-बिट कंपाइलर्स में उपलब्ध है, लेकिन std::uint32_t
शायद 32-बिट मशीन पर बेहतर विकल्प होगा। तो प्रलोभन तब std :: size_t का उपयोग करना होगा, लेकिन किसी दिए गए आर्किटेक्चर के लिए कोई गारंटी नहीं है कि std::size_t
अंकगणितीय के लिए सबसे कुशल प्रकार है, उदाहरण के लिए the new x32 Linux ABIstd::size_t
32-बिट्स पर होगा लेकिन std::uint64_t
अभी भी सबसे अच्छा विकल्प होगा।सी ++ 11 में बिग्नम को लागू करने के लिए सबसे कुशल शब्द आकार निर्धारित करना?
सी ++ 11 में विभिन्न आकारों के तेज़/कम प्रकार के प्रकार परिभाषित किए गए हैं, लेकिन यह उनके सापेक्ष प्रदर्शन से पूछताछ करने का कोई तरीका नहीं देता है। मुझे एहसास है कि कोई सर्वश्रेष्ठ पोर्टेबल उत्तर नहीं हो सकता है, मेरा सबसे अच्छा अनुमान अब std::size_t
पर डिफ़ॉल्ट है और कॉन्फ़िगर समय पर असाधारण आर्किटेक्चर का पता लगाता है। लेकिन शायद एक बेहतर तरीका है?
खैर संकलन, मैं uint_fast32_t लगता है या uint_fast64_t सबसे अच्छा समाधान हो सकता है। यह कम से कम आपके डेटा प्रकारों के लिए गति और कम से कम 32/64 बिट्स सुनिश्चित करेगा। शायद यह उनके लिए क्या मतलब है। – Morwenn
"* सी ++ 11 जनादेश है कि std :: uint64_t उदाहरण के लिए मौजूद है *" नहीं, ऐसा नहीं है। यह वैकल्पिक है। इसके अलावा: "* लेकिन std :: uint32_t शायद 64-बिट मशीन पर बेहतर विकल्प होगा *" मुझे लगता है कि आप का मतलब है "** 32-बिट ** मशीन" –
@ निकोलबोलस: ओह, आप दोनों मायने में सही हैं। –