अगला कोड मुझे देता है परिणाम में 5.999999999999998, लेकिन सही जवाब 6.प्रेसिजन Erlang में
Alpha = math:acos((4*4 + 5*5 - 3*3)/(2*4*5))
Area = 1/2 * 4 * 5 * math:sin(Alpha)
है यह 6 पाने के लिए संभव है?
अगला कोड मुझे देता है परिणाम में 5.999999999999998, लेकिन सही जवाब 6.प्रेसिजन Erlang में
Alpha = math:acos((4*4 + 5*5 - 3*3)/(2*4*5))
Area = 1/2 * 4 * 5 * math:sin(Alpha)
है यह 6 पाने के लिए संभव है?
आप एक समस्या इतना आम यह अपने आप वेब साइट, What Every Programmer Should Know About Floating-Point Arithmetic है कि में चलाने की है के साथ। समस्या एफपी अंकगणित का समर्थन करने वाले बाजार पर हर सीपीयू में बहुत अधिक फ्लोटिंग-पॉइंट अंकगणितीय कार्यों के कारण है; यह Erlang के लिए विशिष्ट नहीं है।
यदि नियमित फ़्लोटिंग पॉइंट अंकगणित आपको सटीकता या सटीकता प्रदान नहीं करता है, तो आप अंतर्निहित अंकगणितीय के बजाय मनमानी सटीक अंकगणितीय पुस्तकालय का उपयोग कर सकते हैं। शायद सबसे प्रसिद्ध ऐसी लाइब्रेरी GMP है, लेकिन आपको इसे एरलांग से उपयोग करने के लिए NIFs में लपेटना होगा।
at least one pure-Erlang alternative है, लेकिन मुझे इसका कोई अनुभव नहीं है, इसलिए मैं व्यक्तिगत रूप से इसका समर्थन नहीं कर सकता।
यह निश्चित रूप से फ़्लोटिंग-पॉइंट अंकगणित करने वाले किसी के लिए पढ़ा जाना चाहिए। – rvirding
लिंक – Yola
@WarrenYoung के लिए बहुत बढ़िया धन्यवाद जानकारी के लिए धन्यवाद, मैंने खोज की और मुझे यह पता चला: https://github.com/tim/erlang-decimal लेकिन मुझे यकीन नहीं है कि सक्रिय विकास में है, लेकिन कुछ लोगों के बदलाव और नई सुविधाओं के साथ कांटा है। – JHG
गणना आपके हार्डवेयर पर मानक फ़्लोटिंग पॉइंट अंकगणित का उपयोग करके की जाती है। कभी-कभी गोल करने वाली त्रुटियां दिखाई देती हैं।
क्या आपको वास्तव में 15 अंकों की सटीकता की आवश्यकता है?
एक अधिक "सटीक" मूल्य प्राप्त करने के लिए वहाँ कई विकल्प हैं:
> round(Area). % Will round to integer
6
या आप कुछ सटीक
round(Area * 10000000)/10000000.
6.0
पर पूर्णांक सकता उद्देश्य मूल्य मुद्रित करने के लिए है, तो साथ मुद्रण है फ्लोट्स के लिए डिफ़ॉल्ट आउटपुट आपको कम परिशुद्धता देता है।
io:format("~f~n", [Area]).
6.000000
ok
या एक विशिष्ट परिशुद्धता
io:format("~.14f~n", [Area]).
6.00000000000000
ok
HTH
फ़्लोटिंग-पॉइंट अंकगणित का उपयोग करते समय आपको सटीक परिणाम प्राप्त करने की गारंटी नहीं है। इस विषय को कई बार, कई बार पहले से ही कवर किया गया है। – Nayuki