2016-08-01 20 views
16

आईईईई 754 फ्लोटिंग-पॉइंट डिवीजन की उलटाई क्या है? मेरा मतलब यह है कि यह मानक द्वारा गारंटी दी जाती है कि यदि double y = 1.0/x तो x == 1.0/y, यानी x को थोड़ा सा ठीक से पुनर्स्थापित किया जा सकता है?आईईईई 754 फ्लोटिंग-पॉइंट डिवीजन की उलटाई

मामले yinfinity या NaN स्पष्ट अपवाद हैं।

+4

वहाँ स्पष्ट मामलों रहे हैं जहां, इस तरह के अनंत और अनिश्चितकालीन, और संभवतः के रूप में यह नहीं कर सकते denormalized संख्या भी। लेकिन यह बाकी के लिए एक अच्छा सवाल है। –

+2

ऐसा लगता है कि यह शून्य और अनंत के लिए ठीक काम करेगा ... –

+0

सरल काउंटर उदाहरण से कोई यह दिखा सकता है कि एक आईईईई -754 अनुपालन फ्लोटिंग-पॉइंट पारस्परिक इस फैशन में वापस नहीं किया जा सकता है। उदाहरण के लिए, 'बाइनरी 32':' x = 0x1.fffffep-1: 1.0f/x = 0x1.000002p + 0 1.0f/(1.0f/x) = 0x1 के साथ राउंडिंग मोड को निकटतम-या-यहां तक ​​कि राउंडिंग मोड का उपयोग करना। fffffcp-1' और 'binary64' के साथ:' x = 0x1.fffffffffffffp-1: 1.0f/x = 0x1.0000000000001p + 0 1.0f/(1.0f/x) = 0x1.ffffffffffffep-1' – njuffa

उत्तर

13

हां, आईईईई 754 डबल-परिशुद्धता (*) मान x हैं जो x != 1.0/(1.0/x) हैं।

इस संपत्ति के साथ सामान्य मूल्य का एक उदाहरण बनाना आसान है: C99's hexadecimal notation for floating-point values में लिखा गया है 1.0/(1.0/0x1.fffffffffffffp0) == 0x1.ffffffffffffep00x1.fffffffffffffp0 की अपेक्षा करना महत्वपूर्ण था क्योंकि 1.0/0x1.fffffffffffffp0 एक बिनैड की शुरुआत में पड़ता है, जहां फ़्लोटिंग-पॉइंट नंबर कम घने होते हैं, इसलिए आंतरिकतम विभाजन पर एक बड़ी सापेक्ष त्रुटि होती है। अधिक सटीक, 1.0/0x1.fffffffffffffp00.5 और इसके डबल-परिशुद्धता उत्तराधिकारी के बीच मध्य बिंदु से ऊपर गिरता है, ताकि 1.0/0x1.fffffffffffffp0 एक बड़ी सापेक्ष त्रुटि के साथ 0.5 के उत्तराधिकारी तक गोल हो।

दशमलव %.16e प्रारूप में, 0x1.fffffffffffffp01.9999999999999998e+00 है और 0x1.ffffffffffffep01.9999999999999996e+00 है।

(*) वहाँ उलटा समारोह आईईईई 754 प्रारूप से किसी के लिए सवाल में संपत्ति के लिए के लिए कोई कारण नहीं है

+7

यहां एक मजेदार और आसानी से साबित तथ्य यह है कि (मानना ​​है कि ओवरफ्लो और अंडरफ्लो से बचाया जाता है, एक आईईईई 754 बाइनरी प्रारूप, राउंड-आधा से भी इत्यादि), कोई भी फ्लोट 'x' जिसका अंश सीमा में है [1.0 , sqrt (2)] 'संपत्ति होगी कि' 1.0/(1.0/x) == x'। –

-3

स्पष्ट रूप से नहीं। 1/10 का कोई प्रतिनिधित्व नहीं है। आप इसके बजाय अनुमान लगाते हैं। इनवर्टिंग जो आपको 10 नहीं देगा।

संपादित करें: इनमें से बड़ी संख्या में हैं। किसी भी व्यस्त जो 53 से अधिक बिट्स की आवश्यकता है उनमें से एक होगा।

एक आसान परीक्षण है। सी में आप 10.0 के खिलाफ 1.0/(1.0/10.0) का परीक्षण कर सकते हैं और आप पाएंगे कि वे बराबर नहीं हैं।

+2

यह सच नहीं है: http://coliru.stacked-crooked.com/a/c1c76fcf94b68e68 – plasmacel

+0

सत्य क्या नहीं है? उस 0.1 को प्रतिबिंबित नहीं किया जा सकता है या 0.1 जो नहीं है, उसे 10 में नहीं मिलेगा? डिवाइस को कैसे पता चलेगा कि (1/10) -प्स 1/10 होना चाहिए और अनुमान नहीं है? – DAV

+0

तो 1/10 में क्या बदलाव होगा? –

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