2016-10-28 15 views
7

मुझे दिलचस्पी है यदि जावा आईईईई 754 मानक का उपयोग अपने फ्लोटिंग पॉइंट अंकगणितीय को लागू करने के लिए कर रहा है। Here मैं दस्तावेज में बात इस तरह का देखा:क्या जावा फ्लोटिंग पॉइंट प्राइमेटिव्स के लिए कोई आईईईई 754 मानक कार्यान्वयन है?

आपरेशन आईईईई 754-2008

में परिभाषित के रूप में मैं समझता हूँ आईईईई 754 के सकारात्मक पक्ष चल बिन्दु arithmetics की शुद्धता को बढ़ाने के लिए है तो मैं हूँ अगर जावा में double या float का उपयोग कंप्यूटेशंस का अनुमान BigDecimal जैसा होगा? और यदि Math कक्षा में आईईईई 754 मानक का उपयोग करने का क्या मतलब है?

उत्तर

8

मुझे दिलचस्पी है कि जावा आईईईई 754 मानक का उपयोग अपने फ्लोटिंग पॉइंट अंकगणितीय को लागू करने के लिए कर रहा है।

आईईईई-754 कई फ्लोटिंग प्वाइंट प्रकार के लिए मानकों को परिभाषित करता है। कई सालों तक, वे सभी बाइनरी फ़्लोटिंग पॉइंट थे; यही है कि जावा का float और double हैं: float 32-बिट आईईईई -754 बाइनरी फ़्लोटिंग पॉइंट मान (मानक कॉल binary32) है। double एक 64-बिट एक है (मानक कॉल binary64)। इन बाइनरी फ्लोटिंग पॉइंट नंबर कंप्यूटर की गणना करने के लिए बहुत ही कुशल हैं, लेकिन क्योंकि वे बाइनरी में काम करते हैं और हम दशमलव में काम करते हैं, कुछ अपेक्षाएं विसंगतियां होती हैं; उदाहरण के लिए, 0.1 को double में ठीक से संग्रहीत नहीं किया जा सकता है, और आपको जैसे 0.30000000000000004 होने की विषमताएं मिलती हैं। विवरण के लिए Is floating point math broken? देखें। उदाहरण के लिए, वे वित्तीय गणना के लिए एक अच्छी पसंद नहीं हैं।

BigDecimal एक जावा वर्ग कि दशमलव फ्लोटिंग प्वाइंट को लागू करता है। यह double का उपयोग करने से बहुत धीमा है, लेकिन परिणाम हमारे दशमलव-दिमागी उम्मीदों के साथ फिट होते हैं (उदाहरण के लिए, 0.1 + 0.20.3 होगा)।

आईईईई -754 का 2008 संस्करण विशेष रूप से decimal32, decimal64, और decimal128 में महत्वपूर्ण नए प्रारूप जोड़ता है। ये दशमलव फ़्लोटिंग पॉइंट हैं, और इसलिए वे वैसे ही काम करते हैं जो हम करते हैं। 0.1 को decimal64 में सटीक रूप से संग्रहीत किया जा सकता है। 0.1 + 0.2decimal64 में है। हालांकि, जहां तक ​​मैं कह सकता हूं, वे आपके प्रश्न के लिए वास्तव में प्रासंगिक नहीं हैं।

चूंकि BigDecimal आईईईई -754 2008 (कुछ मार्जिन द्वारा) की भविष्यवाणी करता है, यह अपने स्वयं के अर्थशास्त्र को परिभाषित करता है।

और यदि मैथ क्लास में आईईईई 754 मानक का उपयोग करने का क्या मतलब है?

JDK9 Math कि आईईईई-754 2008 कल्पना (fma जैसे है, जो एक fused multiply-add करता है) द्वारा परिभाषित किया गया काम करने की नई संचालन कहते हैं, और इसलिए यह आईईईई-754 2008 कल्पना के संदर्भ में उन कार्यों को परिभाषित करता है, विस्तृत जानकारी के लिए।

अधिक पढ़ने:

+0

nitpick: प्रश्नकर्ता आईईईई 754-2008, जो, द्विआधारी फ्लोटिंग प्वाइंट प्रकार के अलावा, दशमलव floating- को परिभाषित करता है के बारे में पूछताछ बिंदु प्रकार 'दशमलव 64' और' दशमलव128' जो वास्तव में '0.1' का प्रतिनिधित्व करने में सक्षम हैं। – njuffa

+0

@njuffa: अच्छा बिंदु, मुझे उस प्रश्न के उद्धृत बिट में याद आया। और अंधा लिंक जेडीके 9 चश्मा 2008 के मानक के बारे में बात कर रहे हैं। यह पूरी तरह से जवाब बदलता है। –

+0

@njuffa: फिक्स्ड, और इसे इंगित करने के लिए फिर से धन्यवाद। –

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