दिलचस्प पोस्ट
को बढ़ावा देने के लाभ क्या हैं: noncopyable क्या पायथन के भीतर से विंडोज पर एक प्रक्रिया को मारना संभव है? PHP (स्ट्रिप_टाग्स) के jQuery (लगभग) समकक्ष JVM में JIT- संकलित कोड को कैसे देखें? हैश असाइन करने के लिए कैसे करें = 'सी' अगर हैश मौजूद नहीं है? विंडोज और फ़ोल्डर्स का नाम बदला, 'कॉन' मुद्दा एक INI फ़ाइल की रेखा संख्या प्राप्त करने के लिए क्रॉस-प्लेटफ़ॉर्म का तरीका जहां दिया गया विकल्प मिला कैश में फिट होने के लिए फ़ॉन्ट आकार बहुत बड़ा है आप एंड्रॉइड में इंटरनेट कनेक्शन की जांच कैसे करते हैं? रूबी: आवश्यकता होती है vs_relative – रूबी <1.9.2 और> = 1.9.2 दोनों में चलने के लिए सबसे अच्छा अभ्यास javac को आंतरिक या बाह्य कमांड, ऑपरेटिव प्रोग्राम या बैच फ़ाइल के रूप में मान्यता नहीं है प्रतिबिंब का उपयोग करते हुए मैं एक सामान्य प्रकार की सही पाठ परिभाषा कैसे प्राप्त करूं? # <RSpec :: कोर :: उदाहरण समूह :: नेस्टेड_1: 0x00000106db51f8> के लिए अपरिभाषित विधि `पाने ' किसी अन्य में चयन के आधार पर एक ड्रॉपडाउन तैयार करें json प्रतिक्रिया के साथ jQuery के AJAX अनुरोध, कैसे?

जावा में कितने महत्वपूर्ण अंक फ़्लोट्स और युगल हैं?

क्या एक फ्लोट में 32 बाइनरी अंक हैं और दोहरी में 64 बाइनरी अंक हैं? दस्तावेज़ का अर्थ समझना बहुत कठिन था

क्या सभी बिट्स महत्वपूर्ण अंकों में अनुवाद करते हैं? या दशमलव बिंदु का स्थान कुछ बिट्स लेता है?

Solutions Collecting From Web of "जावा में कितने महत्वपूर्ण अंक फ़्लोट्स और युगल हैं?"

फ्लोट : 32 बिट्स (4 बाइट्स) जहां 23 बिट्स को मैंटिसा (लगभग 7 दशमलव अंक) के लिए उपयोग किया जाता है। एक्सपोनेंट के लिए 8 बिट्स का उपयोग किया जाता है, इसलिए एक फ्लोट उन 8 बिट्स के द्वारा दशमलव बिंदु को दाईं ओर या बाईं ओर "स्थानांतरित" कर सकता है। ऐसा करने से 0.0000003 (3 × 10 -7 ) या 3000000 (3 × 10 7 ) के रूप में मंटिसा में बहुत सारे शून्य संग्रहीत करने से बचा जाता है। साइन बिट के रूप में 1 बिट का उपयोग किया जाता है

डबल : 64 बिट्स (8 बाइट्स) जहां 52 बिट्स का उपयोग मैंटिसा (लगभग 16 दशमलव अंक) के लिए किया जाता है। एक्सपोनेंट के लिए 11 बीट्स का उपयोग किया जाता है और 1 बिट साइड बिट है।

चूंकि हम द्विआधारी (केवल 0 और 1) का उपयोग कर रहे हैं, मंटिसा में एक बिट परस्पर रूप से 1 है (दोनों फ्लोट और डबल इस चाल का उपयोग करें) जब संख्या शून्य है

इसके अलावा, चूंकि हर चीज द्विआधारी (मैंटिसा और एक्सपोनेंट्स) में होती है, ये रूपांतरण आमतौर पर दशमलव संख्या में नहीं होती हैं। संख्या 0.5, 0.25, 0.75, 0.125 जैसे ठीक से जमा की जाती है, लेकिन 0.1 नहीं है। जैसा कि अन्य लोगों ने कहा है, अगर आपको सेंट को स्टोर करना है, तो फ्लोट या डबल का उपयोग न करें, इंट, लम्बी, बिगइटेजर या बिगडीकल का उपयोग करें।

सूत्रों का कहना है:

http://en.wikipedia.org/wiki/Floating_point#IEEE_754:_floating_point_in_modern_computers

http://en.wikipedia.org/wiki/Binary64

http://en.wikipedia.org/wiki/Binary32

जावा विनिर्देशन से :

फ्लोटिंग-प्वाइंट प्रकार फ्लोट और डबल हैं, जो एक-एक सटीक 32-बिट और दोहरे सटीक 64-बिट प्रारूप आईईईई 754 मानों और ऑपरेशन के साथ अवधारणात्मक हैं, जैसा कि आईईईई स्टैंडर्ड में द्विपदीय फ़्लोटिंग-पॉइंट अंकगणित, एएनएसआई / आईईईई मानक 754-1985 (आईईईई, न्यूयॉर्क)

चूंकि आईईईई 754 मूलभूत बातें को समझने के बिना संख्याओं के साथ कुछ भी करना कठिन है, यहां एक और लिंक है

यह समझना महत्वपूर्ण है कि परिशुद्धता एक समान नहीं है और यह संख्याओं का सटीक संग्रह नहीं है जैसा कि पूर्णांकों के लिए किया जाता है

एक उदाहरण :

 double a = 0.3 - 0.1; System.out.println(a); 

प्रिंट

 0.19999999999999998 

यदि आपको मनमाने ढंग से सटीकता की आवश्यकता है (उदाहरण के लिए वित्तीय उद्देश्यों के लिए) आपको बड़ी दशमलव की आवश्यकता हो सकती है

एक सामान्य गणित जवाब।

समझना है कि एक फ्लोटिंग प्वाइंट नंबर को एक्सपोनेंट और बाकी का प्रतिनिधित्व करने वाले कुछ बिट्स के रूप में कार्यान्वित किया जाता है, अधिकांश अंकों (बाइनरी सिस्टम में) के लिए, निम्न में एक स्थिति है:

एक उच्च प्रतिपादक के साथ, 10 ² का कहना है कि यदि कम से कम महत्वपूर्ण बिट को बदल दिया गया है, तो दो आसन्न घटकर संख्याओं के बीच एक बड़ा अंतर दिखाई देगा। इसके अलावा आधार 2 दशमलव बिंदु बनाता है कि कई आधार 10 संख्या केवल अनुमानित हो सकते हैं; 1/5, 1/10 अनंत संख्या

तो सामान्य तौर पर : यदि आप महत्त्वपूर्ण अंकों की परवाह करते हैं तो फ़्लोटिंग बिंदु संख्याओं का उपयोग नहीं किया जाना चाहिए। गणना के साथ मौद्रिक मात्रा के लिए, ई, ए, सबसे अच्छा उपयोग बिगडेकल

भौतिकी के लिए तैरते हुए बिंदु डबल्स पर्याप्त हैं, लगभग कभी नहीं तैरता है । इसके अलावा प्रोसेसर के फ्लोटिंग प्वाइंट भाग, एफपीयू, आंतरिक रूप से थोड़ा और अधिक सटीकता का उपयोग भी कर सकता है।

फ़्लोटिंग पॉइंट नंबर एक एक्सपोनेंशन फॉर्म का उपयोग करके एन्कोड किया गया है, जो कि m * b ^ e तरह कुछ है, अर्थात इंटिजर्स की तरह बिल्कुल नहीं। जो सवाल आप पूछते हैं वह निश्चित बिंदु संख्याओं के संदर्भ में सार्थक होगा। कई निश्चित बिंदु अंकगणितीय पुस्तकालय उपलब्ध हैं

फ़्लोटिंग पॉइंट अंकगणित के बारे में: दशमलव अंकों की संख्या प्रस्तुति और संख्या प्रणाली पर निर्भर करती है। उदाहरण के लिए आवधिक संख्याएं ( 0.33333 ) हैं जो दशमलव में एक सीमित प्रस्तुति नहीं रखते हैं, लेकिन बाइनरी में एक और इसके विपरीत है।

इसके अलावा यह उल्लेख करना महत्वपूर्ण है कि किसी बिंदु के ऊपर चल बिन्दु संख्या का एक से बड़ा अंतर हो सकता है, यानी value + 1 पैदावार का value , क्योंकि value + 1 m * b ^ e का उपयोग करके एन्कोड नहीं किया जा सकता, जहां m , b और e लंबाई में तय हो गई हैं वही 1 से छोटा मानों के लिए होता है, यानी सभी संभावित कोड बिंदुओं की समान दूरी नहीं होती है

इस वजह से निश्चित अंकों के अंकों की तरह सटीक अंकों की सटीकता नहीं होती है, क्योंकि दशमलव अंकों के साथ हर संख्या में आईईईई एन्कोडिंग नहीं होता है।

एक लगभग अनिवार्य दस्तावेज है जिसे आप पढ़ना चाहिए, जो फ़्लोटिंग बिंदु संख्याओं को बताते हैं: हर कंप्यूटर वैज्ञानिक को फ़्लोटिंग पॉइंट अंकगणित के बारे में क्या पता होना चाहिए

यदि हम न्यूनतम सकारात्मक फ्लोट मान को देखते हैं

 Float.MIN_VALUE = 1.4E-45f; // 0.000000000000000000000000000000000000000000001401298464324817 

इसलिए तकनीकी रूप से फ्लोट 60 मूल्यों तक पकड़ कर सकते हैं ताकि 1 से -1 के बीच की सीमाओं के लिए आप केवल 44 स्थानों का उपयोग करना चाहते हैं

सामान्य उद्देश्यों के लिए मैं 0.0001 के न्यूनतम परिशुद्धता को देखकर 99 99.9 99 5 और 99 99.9 99 5 के बीच रहना चाहता हूं।

मस्ती के लिए आप कोशिश कर सकते हैं:

System.out.println(new DecimalFormat("#####.#####").format(9996.9996f));

Result: 9997

यदि हम न्यूनतम सकारात्मक डबल मान को देखते हैं

 Double.MIN_Value = 4.9E-324; // 0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049 

इसलिए तकनीकी रूप से दोहरी 326 मूल्यों को पकड़ सकते हैं, इसलिए (1 और -1) के बीच श्रेणी के लिए आप केवल 324 स्थानों का उपयोग करना चाहते हैं

Float.intBitsToFloat और Double.longBitsToDouble , किस तरह से समझाएं कि बिट्स फ़्लोटिंग-पॉइंट नंबर के अनुरूप हैं। विशेष रूप से, एक सामान्य float के टुकड़े कुछ ऐसा दिखते हैं

  s * 2^exp * 1.ABCDEFGHIJKLMNOPQRSTUVW 

जहां ए … W 23 बिट्स हैं – 0 एस और 1 एस – बाइनरी में एक अंश का प्रतिनिधित्व – +/- 1 है, जो क्रमशः 0 या 1 के द्वारा दर्शाया जाता है, और एप एक हस्ताक्षरित 8-बिट पूर्णांक है