2012-01-30 23 views
5

मुझे लगता है कि एक दशमलव संख्या केवल बाइनरी सिस्टम में एक फ्लोट के रूप में इतनी सटीक संग्रहित हो सकती है, लेकिन मुझे नहीं पता कि 10/7 के मेरे आउटपुट में 7 दशमलव स्थान पर क्या हो रहा है ।जावा स्टोर कैसे फ्लोट बनाम

मेरे पहले आउटपुट टेस्ट में मैंने देखा कि फ्लोट वी के अंत में 5 (7 वां स्थान) 4 (7 वें स्थान) के बाद डबल में 2 होता है। मुझे लगता है कि होगा उसके बाद से दो में 8 वें स्थान पर एक 2.

फ्लोट १.४२८५७१५ डबल 1,4285714285714286

मैं तो नाव प्रारूप का उपयोग कर अगले उत्पादन परीक्षण भाग गया 17 है नाव में 7 वें स्थान पर एक 4 होगा स्थानों। प्रत्येक में 8 वां स्थान अलग है - फ्लोट एक 6 है, यही कारण है कि 7 वां स्थान 5 तक गोल किया गया है।

फ्लोट 1.428571462631225600 डबल 1,428571428571428600

तीसरे उत्पादन परीक्षण में मैं स्ट्रिंग प्रारूप के साथ एक सीधा कलाकारों की कोशिश की है देखने के लिए क्या होगा। मुझे दूसरे परीक्षण के समान परिणाम मिल गए।

यदि मेरे पास एक जटिल फ़्लोटिंग पॉइंट स्टोरेज विधि के लिए एक सरल सवाल है - मैं क्षमा चाहता हूं।

float f = 10/7f; 
    double d = 10/7d; 

    System.out.format 
     ("Float %1s\nDouble %2s\n", f,d); 
    /* 
    * Float 1.4285715 
     Double 1.4285714285714286 
    */ 

    System.out.format 
     ("Float %1$.17f\nDouble %2$.17f\n", f,d); 
    /* 
    * Float 1.428571462631225600 
     Double 1.428571428571428600 
    */ 

    System.out.format 
     ("Float %1s\nDouble %2s\n", (double)f,d); 
    /* 
    * Float 1.4285714626312256 
     Double 1.4285714285714286 
    */ 
+6

आपका प्रश्न वास्तव में क्या है? (मुझे आपकी पोस्ट में कोई प्रश्न चिह्न नहीं दिख रहा है ...) – maerics

+0

यह कितना डबल संग्रहीत है: - http://en.wikipedia.org/wiki/Double-precision_floating-point_format –

उत्तर

1

ऐसा लगता है कि जब आप एक float का उपयोग यह एक डिफ़ॉल्ट का उपयोग करता है इस संख्या के लिए 8 अंकों की परिशुद्धता। जब आप एक परिशुद्धता निर्दिष्ट करते हैं तो यह स्पष्ट करता है कि यह मान की गणना करने के लिए वास्तव में double का उपयोग करता है।

6

मेरे पहले आउटपुट टेस्ट में मैंने देखा कि फ्लोट वी के अंत में 5 (7 वां स्थान) 4 (7 वें स्थान) के बाद डबल में 2 होता है। मुझे लगता है कि होगा नाव में 7 वें स्थान पर एक 4 होगा उसके बाद से दो में 8 वें स्थान पर एक 2.

यह अपेक्षा ही समझ में आता है अगर आपको लगता है कि तैरता दशमलव में आंतरिक रूप से संग्रहीत और कुछ संख्या के लिए गोल कर रहे हैं दशमलव अंकों का। लेकिन यह सच नहीं है, फ्लोट को आंतरिक रूप से बाइनरी में संग्रहीत किया जाता है और बाइनरी अंकों की संख्या में गोल किया जाता है।

आपकी अपेक्षाएं फ़्लोटिंग पॉइंट नंबरों को संग्रहीत करने की गलतफहमी पर आधारित हैं। आप युगल को केवल सटीक दशमलव स्थान वाले देखते हैं क्योंकि इसका परिणाम अधिक सटीक बाइनरी स्थानों के परिणामस्वरूप होता है। कार्यान्वयन संख्याओं को दशमलव रूप में बिल्कुल संग्रहित नहीं करता है।

+0

बताते हुए सबसे सटीक स्पष्टीकरण के लिए उपरोक्त _ऐसा क्यूँ होता है। –