2012-02-23 28 views
6

निम्नलिखित साइट के अनुसार: http://en.cppreference.com/w/cpp/language/typesडबल - आईईईई 754 विकल्प

"डबल - डबल परिशुद्धता चल बिन्दु प्रकार आमतौर पर आईईईई-754 64 बिट चल बिन्दु प्रकार।"।

यह "आमतौर पर" कहता है। सी ++ double का उपयोग करने के लिए अन्य संभावित प्रारूप/मानक क्या उपयोग कर सकते हैं? क्या कंपाइलर आईईईई प्रारूप के लिए एक विकल्प का उपयोग करता है? या वास्तुकला?

+0

मुझे लगता है कि सभी अपवाद बहुत पुराने होने जा रहे हैं। मैंने एक नियंत्रण डेटा साइबर का उपयोग किया जिसमें उदाहरण के लिए 60-बिट फ़्लोटिंग पॉइंट था। –

+0

[सभी ज्ञान के भंडार] के अनुसार (http://en.wikipedia.org/wiki/Floating_point#History): कुछ आईबीएम और क्रे मेनफ्रेम, और शुरुआती 80 के दशक से पहले, गैर-आईईईई प्रारूपों का उपयोग करें। –

+0

सी ++ मानक के अनुरूप कुछ भी करेगा। –

उत्तर

3

एक संक्षिप्त इतिहास सबक के लिए, आप Intel Floating Point Case Study की जाँच कर सकते हैं।

इंटेल compilers डिफ़ॉल्ट रूप से चालू है कि जब अनुकूलन के कि एक तथाकथित fast-math feature सक्षम बनाता है एक विकल्प है। यह गणित को बहुत तेज बनाता है लेकिन आईईईई मानकों के साथ सख्त अनुपालन छोड़ देता है। कोई fp-model option के साथ सख्त मानक अनुपालन को लागू कर सकता है।

मेरा मानना ​​है कि NVIDIA GPU के लिए CUDA भाषा भी एक काफी तेजी गणित पुस्तकालय है अगर एक आईईईई मानक के साथ कड़ाई से अनुपालन देने को तैयार है। यह न केवल गणित को तेज़ी से बनाता है, बल्कि यह विशेष रूप से अनुवांशिक कार्यों के लिए उपयोग किए जाने वाले रजिस्टरों की संख्या को कम करता है।

चाहे अनुपालन की जरूरत है एक मामला-दर-मामला आधार पर निर्भर करता है। हमने इंटेल ऑप्टिमाइज़ेशन के साथ समस्याओं का अनुभव किया है और डबल परिशुद्धता गणित के साथ सही परिणाम सुनिश्चित करने के लिए fp-model strict विकल्प चालू करना पड़ा है।

6

Vaxen, Crays, और आईबीएम mainframes, नाम करने के लिए बस कुछ ही यथोचित व्यापक उपयोग में अभी भी कर रहे हैं कि। उनमें से अधिकांश (सभी?) अब आईईईई फ्लोटिंग पॉइंट भी कर सकते हैं, लेकिन कभी-कभी केवल एक विशेष एड-ऑन के साथ। अन्य मामलों में (आईबीएम) आईईईई अंकगणित में एक महत्वपूर्ण गति जुर्माना हो सकता है।

पुरानी मशीनों के लिए, अधिकांश मेनफ्रेम (यूनिसिस, कंट्रोल डेटा इत्यादि) ने अद्वितीय फ़्लोटिंग पॉइंट प्रारूपों का उपयोग किया, जिनमें से अधिकांश आईईईई की तरह भी नहीं थे, वास्तव में उल्लेखनीय नहीं है।

2

लगता है कि अधिकांश कंप्यूटर आज आईईईई -754 का उपयोग करते हैं। लेकिन विकल्प पहले उपलब्ध थे प्रतीत होता है। अतिरिक्त 128 और पैक किए गए बीसीडी जैसे प्रारूप पहले (http://aplawrence.com/Basics/floatingpoint.html) का उपयोग किया गया है। विकिपीडिया एंट्री में कुछ सूचीबद्ध हैं

0

"क्या संभवतः अन्य संभावित प्रारूप/मानक सी ++ डबल उपयोग कर सकते हैं?" के जवाब में, यह एएमएमएल एवीआर के लिए जीसीसी (जो 8 बिट डेटा सीपीयू हैं, कुछ Arduinos में) 64 बिट्स के रूप में double लागू नहीं करता है।

GCC wiki, avr-gcc page और विशेष रूप से 'double' subsection of 'Deviations from the Standard' देखें जहां लिखा है

double केवल 32 बिट चौड़ा है और के रूप में float

एक ही तरीके से लागू किया मेरा मानना ​​है कि अन्य सीपीयू समान कार्यान्वयन है, लेकिन मैं उन्हें नहीं मिला।