2011-03-09 5 views
9

मैं सोच रहा था कि क्या कोई साथी एसओ एक अच्छा हल्के वजन वाले निश्चित आकार पूर्णांक प्रकार (128-बिट या यहां तक ​​कि 256-बिट, संभवतः यहां तक ​​कि टेम्पलेट पैरामीट्रिज्ड) लाइब्रेरी की भी सिफारिश कर सकता है।सी ++ 128/256-बिट निश्चित आकार पूर्णांक प्रकार

मैंने जीएमपी और सह पर एक नज़र डाली है, वे बहुत अच्छी देखभाल करते हैं, फिर भी मेरे उद्देश्यों के लिए थोड़ा बड़ा है, मुझे इस बिंदु पर केवल सरल शीर्षलेख में रूचि है। प्रदर्शन महत्वपूर्ण है और लक्ष्य आर्किटेक्चर x86 और x86-64 होगा, यह भी एक उचित लाइसेंस (उर्फ कुछ भी जीपीएल या एलजीपीएल) होगा।

+3

उनको नहीं देखा है, लेकिन इसे स्वयं लिखना बहुत कठिन नहीं होना चाहिए? (और बोनस के रूप में, आपके पास कोई लाइसेंसिंग समस्या नहीं होगी) – CygnusX1

+0

यह प्रश्न भी ध्यान में रखते हुए: http://stackoverflow.com/questions/1188939/representing-128-bit-numbers-in-c –

उत्तर

0

कुछ मूल 128-बिट प्रकार कुछ प्लेटफ़ॉर्म पर उपलब्ध हैं, तो आप आर्किटेक्चर द्वारा सीमित हैं। उदाहरण के लिए __m128 एसएसई 2 के लिए उपलब्ध है?

http://msdn.microsoft.com/en-us/library/ayeb3ayc.aspx

इसके अलावा इस ABI में __int128 के रूप में सूचीबद्ध:

http://www.x86-64.org/documentation/abi-0.99.pdf

uint128_t और uint256_t के पसंदीदा नामकरण शोगुन, पर ध्यान देने के साथ एक "बड़े पैमाने पर मशीन सीखने पिटारे में पाया जा सकता है हालांकि विशेष रूप से समर्थन वेक्टर मशीनें (एसवीएम) "

http://www.shogun-toolbox.org/doc/index.html

+0

'__m128i' एक पैक वेक्टर है पूर्णांक तत्वों के। एसएसई/एवीएक्स 8 बी से 64 बी तक तत्व चौड़ाई के साथ पैक किए गए पूर्णांक जोड़ें/उप का समर्थन करता है, लेकिन * नहीं * 128 बी।बेशक, बूलियन ऑपरेशंस बिट्स (जैसे एंड/ओआर/एक्सओआर) के बीच कोई ले जाने के साथ बस काम करते हैं। मनमाने ढंग से सटीक गणित के लिए, एसएसई एक वाहक वेक्टर प्रदान नहीं करता है, इसलिए एसएसई के साथ कुछ हैक करने के बजाय यह आमतौर पर पूर्णांक 'add'/'adc' का उपयोग करने के लिए तेज़ होता है। –

2

Xint लाइब्रेरी वर्तमान में बूस्ट का हिस्सा बनने के लिए review के तहत है।

  • हैडर केवल
  • उचित लाइसेंस

अंक हैं कि में से एक: हालांकि यह नहीं बल्कि विवादास्पद रूप से चर्चा की है और समीक्षा के परिणाम अभी तक स्पष्ट नहीं है, पुस्तकालय में अपनी आवश्यकताओं में से कुछ को पूरा हालांकि समीक्षा के दौरान चर्चा की गई प्रदर्शन प्रदर्शन है। यदि एक आधिकारिक बूस्ट लाइब्रेरी के रूप में स्वीकार किया जाता है, तो मुझे उम्मीद है कि प्रदर्शन समस्याओं को तत्काल संबोधित किया जाएगा।

तो मैं इसे आज़मा दूंगा: Code, Documentation

+0

मैंने आपकी टिप्पणी को सेव-ओ के उत्तर में पढ़ा है जहां आप अपनी आवश्यकताओं को स्पष्ट करते हैं। एमएल पर चर्चा से मेरा दूर लेना यह है कि आप जो भी खोज रहे हैं वह अभी तक मौजूद नहीं है। मेरी राय में Xint स्वीकार कर लिया जाएगा और एक संस्करण 2 में प्रदर्शन के संदर्भ में आप जो खोज रहे हैं वह हो सकता है। कार्यक्षमता के मामले में आपके पास पहले से ही सब कुछ है। – Sebastian

0

आपकी आवश्यकताओं के आधार पर, एसटीएल कक्षा bitset आपकी आवश्यकताओं के अनुरूप हो सकती है। यह सभी बिट-मैनिपुलेशन ऑपरेटरों का जवाब देता है कि पूर्णांक प्रकार (<<, | इत्यादि), लेकिन दुर्भाग्यवश + या * जैसे अंकगणित ऑपरेटरों के लिए नहीं। इसका आकार टेम्पलेट पैरामीटर के माध्यम से संकलन समय पर तय किया गया है। एक और दुर्भाग्यपूर्ण बात यह है कि एपीआई अंतर्निहित द्विआधारी प्रतिनिधित्व (उदाहरण के लिए स्ट्रीमिंग के लिए) प्राप्त करने का कोई तरीका नहीं प्रदान करता है, जो इसकी उपयोगिता को गंभीरता से सीमित कर सकता है।

(मैं जानता हूँ कि यह एक पुराने सवाल है, लेकिन इस सवाल का जवाब दूसरों की मदद कर सकते हैं।)

3

Boost पुस्तकालय, multiprecision पुस्तकालय के भाग के रूप डेटा प्रकार है 128 से 1024 बिट को लेकर प्रकार के लिए।

#include <boost/multiprecision/cpp_int.hpp> 

using namespace boost::multiprecision; 

int128_t mySignedInt128 = -1; 
uint128_t myUnsignedInt128 = 2; 
int256_t mySignedInt256 = -3; 
uint256_t myUnsignedInt256 = 4; 
int512_t mySignedInt512 = -5; 
uint512_t myUnsignedInt512 = 6; 
int1024_t mySignedInt1024 = -7; 
uint1024_t myUnsignedInt1024 = 8; 
संबंधित मुद्दे