2012-02-09 17 views
6

quadruple का उपयोग किए बिना double परिशुद्धता के साथ 16 से अधिक अंक प्राप्त करना संभव है? यदि यह संभव है, तो यह संकलक या कुछ और पर निर्भर करता है? क्योंकि मुझे पता है कि किसी ने कहा था कि वह double परिशुद्धता के साथ काम कर रहा था और इसमें 22 अंकों की सटीकता थी।विस्तारित डबल परिशुद्धता

उत्तर

6

डेटा प्रकार double precision फोरट्रान 77 से उत्पन्न होता है, और उस प्रकार की एकमात्र आवश्यकता यह है कि real से अधिक सटीकता है। आपको इसका और उपयोग नहीं करना चाहिए।

फोरट्रान 90/95 और उसके बाद, वास्तविक संख्याओं के कम से कम दो आकार समर्थित हैं। परिशुद्धता kind पैरामीटर द्वारा निर्धारित की जाती है, जिसमें से मूल्य संकलक पर निर्भर करता है।

integer, parameter :: long_double = SELECTED_REAL_KIND(22) 

तो आप

real(kind=long_double) :: a, b 
के रूप में अपने चर घोषणा कर सकते हैं:

real(kind=8) :: a, b 

परिशुद्धता को परिभाषित करने के लिए एक पोर्टेबल तरीका है करने के लिए, आप एक kind मूल्य का उपयोग कर एक निश्चित परिशुद्धता की अनुमति देता है प्राप्त कर सकते हैं

लेकिन यह निश्चित नहीं है कि आपका कंपाइलर उस परिशुद्धता का समर्थन करेगा, इस स्थिति में SELECTED_REAL_KIND फ़ंक्शन एक ऋणात्मक संख्या लौटाएगा।

पहले उत्तर राज्यों के रूप में भी this post

+0

लेकिन आपने 'पूर्णांक' लिखा था। क्या केवल 'पूर्णांक' में 22 अंक 'डबल' नहीं हो सकते हैं? – Shibli

+0

'long_double' एक पूर्णांक है जिसका उपयोग' वास्तविक 'चर' ''' और 'b' के 'प्रकार' को इंगित करने के लिए किया जाता है, जिसमें कम से कम सटीकता 22 – steabert

+2

@Shibli यह अक्सर प्राप्त करने के लिए उपयोगी होती है पोर्टेबल तरीके से आपके सिस्टम पर एकल और डबल परिशुद्धता तैरती है। इसके लिए 'पूर्णांक, पैरामीटर :: एसपी = प्रकार (1.e0) 'और' पूर्णांक, पैरामीटर :: डीपी = प्रकार (1.d0)' का उपयोग कर सकते हैं। फिर आप एक वास्तविक परिशुद्धता फ्लोट को 'असली (दयालु = डीपी) :: डबल' के रूप में घोषित कर सकते हैं। – Chris

5

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

यदि आप SELECTED_REAL_KIND आंतरिक का उपयोग करना चाहते हैं और अपने विशेष कंपाइलर और हार्डवेयर के लिए ऑप्टिमाइज़ करना चाहते हैं, तो आप प्रयोग करना चाहेंगे। कुछ संयोजन सॉफ्टवेयर में चतुर्भुज परिशुद्धता प्रदान करेंगे, जो धीमा हो जाएगा। एक कंपाइलर जिसमें डबल परिशुद्धता और 10-बाइट विस्तारित परिशुद्धता है, वह चयनित_real_kind (17) के माध्यम से लंबा प्रकार प्रदान करेगा। एक कंपाइलर जिसमें डबल परिशुद्धता और चौगुनी परिशुद्धता है लेकिन 10-बाइट विस्तारित परिशुद्धता चयनित_real_kind (17) या select_real_kind (32) के माध्यम से चौकोर परिशुद्धता प्रदान नहीं करेगी। (मुझे किसी भी कंपाइलर से अवगत नहीं है जो 10-बाइट विस्तारित और चतुर्भुज दोनों का समर्थन करता है।) कंपाइलर जिसमें क्वाड्रोपोल परिशुद्धता की कमी है, चयनित_real_kind (32) के लिए -1 लौटाएगा।

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