मुझे दशमलव के बजाय डबल का उपयोग कब करना चाहिए?


265

मैं इसके बजाय double(या float) उपयोग करने के तीन फायदे बता सकता हूं decimal:

  1. कम मेमोरी का उपयोग करता है।
  2. तेज़ क्योंकि फ़्लोटिंग पॉइंट गणित संचालन मूल रूप से प्रोसेसर द्वारा समर्थित होते हैं।
  3. बड़ी संख्या का प्रतिनिधित्व कर सकते हैं।

लेकिन ये फायदे केवल गहन संचालन की गणना करने के लिए लागू होते हैं, जैसे कि मॉडलिंग सॉफ़्टवेयर में पाए जाने वाले। बेशक, युगल का उपयोग तब नहीं किया जाना चाहिए जब परिशुद्धता की आवश्यकता होती है, जैसे कि वित्तीय गणना। तो क्या "सामान्य" अनुप्रयोगों के बजाय कभी भी double(या float) चुनने के लिए कोई व्यावहारिक कारण हैं decimal?

जोड़ने के लिए संपादित: सभी महान प्रतिक्रियाओं के लिए धन्यवाद, मैंने उनसे सीखा।

एक और सवाल: कुछ लोगों ने यह मुद्दा बनाया कि युगल वास्तविक संख्याओं का अधिक सटीक प्रतिनिधित्व कर सकते हैं। जब मैंने घोषणा की कि मुझे लगता है कि वे आमतौर पर अधिक सटीक रूप से उनका प्रतिनिधित्व करते हैं। लेकिन क्या यह सही कथन है कि फ्लोटिंग पॉइंट ऑपरेशन्स किए जाने पर सटीकता कम हो सकती है (कभी-कभी काफी)?



5
यह नियमित रूप से उत्कीर्ण हो जाता है और मैं अभी भी इसके साथ संघर्ष करता हूं। उदाहरण के लिए, मैं एक ऐसे एप्लिकेशन पर काम कर रहा हूं जो वित्तीय गणना करता है इसलिए मैं पूरे दशमलव का उपयोग कर रहा हूं। लेकिन Math और VisualBasic। वित्तीय कार्यों में दोहरे का उपयोग होता है, इसलिए इसमें बहुत सारे रूपांतरण हैं जो मुझे लगातार दशमलव के उपयोग का अनुमान लगा रहे हैं।
जेमी इडे

@ जैमी पागल है जो वित्तीय कार्यों का दोहरा उपयोग करता है, पैसा हमेशा दशमलव में होना चाहिए।
क्रिस मैरिकिक

@ क्रिसमिसिक लेकिन क्या जेमी आइडी डबल का उपयोग करके विरासत बकवास के साथ काम कर सकता है? फिर आपको डबल का उपयोग करना चाहिए और कई रूपांतरण गोल त्रुटियों का कारण बनेंगे ... कोई आश्चर्य नहीं कि उन्होंने VisualBasic pfffhh ..... का उल्लेख किया है
एलिजाबेथ

@ एलिसबेथ संभवत: एक अलग पुस्तकालय का उपयोग करेगा जो दशमलव का ठीक से समर्थन करता है। जो कुछ भी
VisualBicic। वित्तीय

जवाबों:


306

मुझे लगता है कि आपने फायदे को अच्छी तरह से संक्षेप में बताया है। हालाँकि आप एक बिंदु याद कर रहे हैं। decimalप्रकार का प्रतिनिधित्व करने पर ही अधिक सटीक है आधार 10 नंबर (जैसे मुद्रा / वित्तीय गणना में इस्तेमाल किए जाने वाले)। सामान्य तौर पर, doubleप्रकार कम से कम महान सटीकता की पेशकश करने वाला है (कोई मुझे गलत होने पर सही करता है) और निश्चित रूप से मनमानी वास्तविक संख्या के लिए अधिक से अधिक गति। सरल निष्कर्ष यह है: जब विचार करना है doubleकि हमेशा उपयोग करें, तब तक उपयोग करें जब तक आपको उस base 10सटीकता की आवश्यकता न हो जो decimalप्रदान करता है।

संपादित करें:

संचालन के बाद फ्लोटिंग-पॉइंट नंबरों की सटीकता में कमी के बारे में आपके अतिरिक्त प्रश्न के बारे में, यह थोड़ा और सूक्ष्म मुद्दा है। वास्तव में, सटीकता (मैं यहाँ सटीकता के लिए एक शब्द का उपयोग करता हूं) प्रत्येक ऑपरेशन के प्रदर्शन के बाद लगातार कम हो जाएगा। यह दो कारणों से है:

  1. तथ्य यह है कि कुछ संख्याओं (सबसे स्पष्ट रूप से दशमलव) को वास्तव में फ्लोटिंग पॉइंट फॉर्म में प्रस्तुत नहीं किया जा सकता है
  2. गोलाई में त्रुटियां होती हैं, जैसे कि आप हाथ से गणना कर रहे हों। यह संदर्भ (आप कितने प्रदर्शन कर रहे हैं) पर बहुत निर्भर करता है कि क्या ये त्रुटियां काफी महत्वपूर्ण हैं लेकिन बहुत अधिक सोचा गया है।

सभी मामलों में, यदि आप दो फ्लोटिंग-पॉइंट नंबरों की तुलना करना चाहते हैं, जो सिद्धांत में समतुल्य होने चाहिए (लेकिन अलग-अलग गणनाओं का उपयोग करते हुए आए थे), तो आपको एक निश्चित डिग्री सहिष्णुता की अनुमति देने की आवश्यकता है (कितना भिन्न होता है, लेकिन आमतौर पर बहुत छोटा है) ।

विशेष मामलों के अधिक विस्तृत अवलोकन के लिए, जहां सटीकता में त्रुटियां पेश की जा सकती हैं, विकिपीडिया लेख का सटीकता अनुभाग देखें । अंत में, यदि आप मशीन स्तर पर फ्लोटिंग-पॉइंट नंबरों / ऑपरेशन्स की गंभीरता से गहराई से (और गणितीय) चर्चा चाहते हैं, तो फ्लोटिंग-पॉइंट अरिथमेटिक के बारे में क्या - क्या कंप्यूटर साइंटिस्ट को पता होना चाहिए , यह अक्सर उद्धृत लेख पढ़ने की कोशिश करें ।


1
क्या आप एक आधार प्रदान कर सकते हैं, आधार १० नंबर का ई जिसके आधार २ को परिवर्तित करते समय सटीकता खो जाती है?
मार्क सिडैड

@ मर्क: 1.000001 एक उदाहरण है, कम से कम जॉन स्कीट के अनुसार। (इस पृष्ठ के प्रश्न देखें 3: yoda.arachsys.com/csharp/teasers-answers.html )
Noldorin

25
@ मर्क: बहुत सरल उदाहरण: 0.1 बेस 2 में एक आवधिक अंश है इसलिए इसे ठीक से व्यक्त नहीं किया जा सकता है double। आधुनिक कंप्यूटर अभी भी सही मूल्य प्रिंट करेंगे, लेकिन केवल इसलिए कि वे परिणाम पर "अनुमान" करते हैं - इसलिए नहीं कि यह वास्तव में सही ढंग से व्यक्त किया गया है।
कोनराड रुडोल्फ

1
Decimalप्रकार के साथ 52 के बारे में के लिए की तुलना में अपूर्णांश में परिशुद्धता के 93-बिट, है double। काश माइक्रोसॉफ्ट ने IEEE 80-बिट प्रारूप का समर्थन किया, हालांकि, भले ही इसे 16 बाइट्स तक गद्देदार करना पड़े; इसकी तुलना में बड़ी रेंज doubleया उससे Decimalअधिक बेहतर गति Decimal, ट्रांसेंडेंटल ऑपरेशंस के लिए समर्थन (जैसे पाप (x), लॉग (x), इत्यादि), और परिशुद्धता की अनुमति होगी जो कि जितना अच्छा Decimalहोगा उतना बेहतर तरीके से नहीं होगा double
सुपरकाट

@charlotte: यदि आप मेरी पूरी पोस्ट पढ़ते हैं, तो आप देखेंगे कि यह समझाया गया है।
नोल्डोरिन

59

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

सामान्य तौर पर, यदि आपका मूल्य क्षणिक है (पुन: उपयोग नहीं किया गया है), तो आप एक फ्लोटिंग पॉइंट प्रकार का उपयोग करने के लिए सुरक्षित हैं। फ़्लोटिंग पॉइंट प्रकारों के साथ वास्तविक समस्या निम्नलिखित तीन परिदृश्य हैं।

  1. आप फ़्लोटिंग पॉइंट मानों को एकत्र कर रहे हैं (जिस स्थिति में सटीक त्रुटियाँ कंपाउंड हैं)
  2. आप फ़्लोटिंग पॉइंट मान के आधार पर मान बनाते हैं (उदाहरण के लिए पुनरावर्ती एल्गोरिथ्म में)
  3. आप बहुत महत्वपूर्ण अंकों के साथ गणित कर रहे हैं (उदाहरण के लिए, 123456789.1 * .000000000000000987654321)

संपादित करें

C # दशमलव पर संदर्भ दस्तावेज के अनुसार :

दशमलव कीवर्ड एक 128-बिट डेटा प्रकार को दर्शाता है। फ्लोटिंग-पॉइंट प्रकारों की तुलना में, दशमलव प्रकार में अधिक सटीक और एक छोटी रेंज होती है, जो इसे वित्तीय और मौद्रिक गणनाओं के लिए उपयुक्त बनाती है।

तो मेरे उपरोक्त कथन को स्पष्ट करने के लिए:

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

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

दशमलव असीम रूप से सटीक नहीं है (एक आदिम डेटा प्रकार में गैर-अभिन्न के लिए अनंत सटीकता का प्रतिनिधित्व करना असंभव है), लेकिन यह दोहरे से कहीं अधिक सटीक है:

  • दशमलव = 28-29 महत्वपूर्ण अंक
  • डबल = 15-16 महत्वपूर्ण अंक
  • फ्लोट = 7 महत्वपूर्ण अंक

EDIT 2

के जवाब में कोनराड रूडोल्फ की टिप्पणी, आइटम # 1 (ऊपर) निश्चित रूप से सही है। अभेद्यता का एकत्रीकरण वास्तव में यौगिक है। एक उदाहरण के लिए नीचे दिया गया कोड देखें:

private const float THREE_FIFTHS = 3f / 5f;
private const int ONE_MILLION = 1000000;

public static void Main(string[] args)
{
    Console.WriteLine("Three Fifths: {0}", THREE_FIFTHS.ToString("F10"));
    float asSingle = 0f;
    double asDouble = 0d;
    decimal asDecimal = 0M;

    for (int i = 0; i < ONE_MILLION; i++)
    {
        asSingle += THREE_FIFTHS;
        asDouble += THREE_FIFTHS;
        asDecimal += (decimal) THREE_FIFTHS;
    }
    Console.WriteLine("Six Hundred Thousand: {0:F10}", THREE_FIFTHS * ONE_MILLION);
    Console.WriteLine("Single: {0}", asSingle.ToString("F10"));
    Console.WriteLine("Double: {0}", asDouble.ToString("F10"));
    Console.WriteLine("Decimal: {0}", asDecimal.ToString("F10"));
    Console.ReadLine();
}

यह निम्न आउटपुट देता है:

Three Fifths: 0.6000000000
Six Hundred Thousand: 600000.0000000000
Single: 599093.4000000000
Double: 599999.9999886850
Decimal: 600000.0000000000

जैसा कि आप देख सकते हैं, भले ही हम एक ही स्रोत स्थिरांक से जोड़ रहे हैं, फिर भी दोहरे के परिणाम कम सटीक हैं (हालांकि संभवतः सही ढंग से गोल होंगे), और फ्लोट उस बिंदु तक कम सटीक है, जहां यह केवल घटाया गया है दो महत्वपूर्ण अंक।


1
बिंदु 1 गलत है। परिशुद्धता / गोलाई की त्रुटियाँ केवल कास्टिंग में होती हैं, गणना में नहीं। यह है सही निश्चित रूप से यह है कि ज्यादातर गणितीय क्रियाओं अस्थिर कर रहे हैं, इस प्रकार त्रुटि गुणा। लेकिन यह एक और मुद्दा है और यह सीमित परिशुद्धता के सभी डेटा प्रकारों के लिए समान लागू होता है, इसलिए विशेष रूप से दशमलव के लिए।
कोनराड रुडोल्फ

1
@ कोनराड रूडोल्फ, उदाहरण "EDIT 2" में देखें उदाहरण के रूप में मैं आइटम # 1 में बनाने की कोशिश कर रहा था। अक्सर, यह समस्या खुद को प्रकट नहीं करती है क्योंकि नकारात्मक संवेग के साथ सकारात्मक संवेग संतुलन में बाधा डालते हैं, और वे अंदर धुल जाते हैं समग्र, लेकिन समान संख्या (जैसा कि मैंने उदाहरण में किया था) को एकत्रित करना समस्या पर प्रकाश डालता है।
माइकल मीडोज

महान उदाहरण है। बस इसे मेरे जूनियर डेवलपर्स को दिखाया, बच्चे आश्चर्यचकित थे।
मचाडो

अब आप 3/5 वें के बजाय 2 / 3rds के साथ एक ही काम कर सकते हैं ... आपको sexagesimal संख्या प्रणाली के बारे में सीखना चाहिए जो 2 / 3rds को पूरी तरह से ठीक करता है।
gnasher729

1
@ gnasher729, 3 / 5th के बजाय 2 / 3rds का उपयोग करना विभिन्न प्रकारों के लिए पूरी तरह से ठीक नहीं था । दिलचस्प बात यह है कि फ्लोट वैल्यू में पैदावार हुई Single: 667660.400000000000जबकि दशमलव मूल्य में कमी आई Decimal: 666666.7000000000। फ्लोट मूल्य सही मूल्य से एक हजार से थोड़ा कम है।
जीनिंगनर

25

आधार 10 मूल्यों के लिए दशमलव का उपयोग करें, जैसे कि वित्तीय गणना, जैसा कि अन्य ने सुझाव दिया है।

लेकिन डबल आम तौर पर मनमाना गणना मूल्यों के लिए अधिक सटीक है।

उदाहरण के लिए यदि आप एक पोर्टफोलियो में प्रत्येक पंक्ति के वजन की गणना करना चाहते हैं, तो दोगुना उपयोग करें क्योंकि परिणाम लगभग 100% तक बढ़ जाएगा।

निम्नलिखित उदाहरण में, doubleResult दशमलव की तुलना में 1 के करीब है:

// Add one third + one third + one third with decimal
decimal decimalValue = 1M / 3M;
decimal decimalResult = decimalValue + decimalValue + decimalValue;
// Add one third + one third + one third with double
double doubleValue = 1D / 3D;
double doubleResult = doubleValue + doubleValue + doubleValue;

तो फिर से एक पोर्टफोलियो का उदाहरण लेते हुए:

  • पोर्टफोलियो में प्रत्येक पंक्ति का बाजार मूल्य एक मौद्रिक मूल्य है और संभवतः दशमलव के रूप में सबसे अच्छा प्रतिनिधित्व किया जाएगा।

  • पोर्टफोलियो में प्रत्येक पंक्ति का वजन (= मार्केट वैल्यू / एसयूएम (मार्केट वैल्यू)) आमतौर पर डबल के रूप में बेहतर रूप से दर्शाया जाता है।


6

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


3
परिशुद्धता केवल दशमलव का लाभ है, यह सही है। आपको यह नहीं पूछना चाहिए कि आपको डेसीमल पर फ्लोटिंग पॉइंट नंबरों का उपयोग कब करना चाहिए। यह आपका पहला विचार होना चाहिए। सवाल तब है जब आपको दशमलव का उपयोग करना चाहिए (और उत्तर यहीं है ... जब सटीक मायने रखता है)।
इंस्ट्रक्टर हंटर

3
@ डैनियल स्ट्रेट, यह मजेदार है, लेकिन मेरे पास इसके विपरीत राय है। मुझे लगता है कि कम सटीक प्रकार का उपयोग करने के कारण इसकी प्रदर्शन विशेषताओं की मात्रा एक पूर्व-प्रयोग के लिए है। इससे पहले कि आपको इसके लाभ का एहसास हो, आपको संभावित रूप से उस प्रस्ताव को कई बार चुकाना पड़ेगा।
माइकल मीडोज

3
@ मिचेल मीडोज, मैं इस तर्क को समझ सकता हूं। हालांकि ध्यान देने योग्य बात यह है कि समयपूर्व अनुकूलन के साथ मुख्य शिकायतों में से एक यह है कि प्रोग्रामर को यह पता नहीं है कि क्या धीमा होने वाला है। हम बिना किसी संदेह के जानते हैं, हालांकि, यह दशमलव दोगुने से भी धीमा है। फिर भी, मुझे लगता है कि ज्यादातर मामलों में, प्रदर्शन में सुधार उपयोगकर्ता के लिए वैसे भी ध्यान देने योग्य नहीं होगा। बेशक, ज्यादातर मामलों में, सटीक की आवश्यकता नहीं है। हे।
इंस्टेंट हंटर

दशमलव फ़्लोटिंग-पॉइंट वास्तव में बिट्स की समान संख्या का उपयोग करके बाइनरी फ़्लोटिंग-पॉइंट की तुलना में कम सटीक है। दशमलव का लाभ 0.01 की तरह DECIMAL भिन्न का प्रतिनिधित्व करने में सक्षम हो रहा है जो वित्तीय गणना में आम हैं।
dan04

खैर, यह काफी सही नहीं है :) - कई गेमों में फ्लोटिंग-पॉइंट नंबर अवांछनीय हो सकते हैं, इस तथ्य के कारण कि वे सुसंगत नहीं हैं। यहाँ
BlueRaja - Danny Pflughoeft

4

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

$ 100 की 1/6 की गणना $ 16.66666666666666 पैदावार ..., इसलिए एक वर्कशीट में किए गए मूल्य $ 16.666667 होगा। डबल और दशमलव दोनों को 6 दशमलव स्थानों पर सटीक परिणाम प्राप्त करना चाहिए। हालाँकि, हम परिणाम को 16666667 पूर्णांक के रूप में आगे ले जाकर किसी भी संचयी त्रुटि से बच सकते हैं। प्रत्येक बाद की गणना को एक ही सटीकता के साथ किया जा सकता है और इसी तरह आगे बढ़ाया जा सकता है। उदाहरण को जारी रखते हुए, मैं उस राशि (16666667 * .0825 = 1375000) पर टेक्सास के बिक्री कर की गणना करता हूं। दोनों को जोड़ना (यह एक छोटी वर्कशीट है) 1666667 + 1375000 = 18041667। हमें 18.041667 या $ 18.04 में दशमलव बिंदु को वापस ले जाना।

हालांकि यह छोटा उदाहरण दोहरे या दशमलव का उपयोग करते हुए संचयी त्रुटि उत्पन्न नहीं करेगा, लेकिन ऐसे मामलों को दिखाना काफी आसान है जहां केवल दोहरे या दशमलव की गणना करना और आगे ले जाना महत्वपूर्ण त्रुटि को जमा करेगा। यदि आपके द्वारा संचालित नियमों को सीमित स्थानों की एक सीमित संख्या की आवश्यकता होती है, तो प्रत्येक मान को पूर्णांक के रूप में 10 ^ (दशमलव स्थान के # आवश्यक) से गुणा करके, और फिर वास्तविक प्राप्त करने के लिए 10 ^ (दशमलव स्थानों के आवश्यक #) से विभाजित करने की आवश्यकता होती है। मूल्य किसी भी संचयी त्रुटि से बच जाएगा।

उन स्थितियों में जहां पेनीज़ के अंश नहीं होते हैं (उदाहरण के लिए, एक वेंडिंग मशीन), गैर-अभिन्न प्रकारों का उपयोग करने का कोई कारण नहीं है। बस इसे पैसे गिनने के रूप में सोचें, डॉलर नहीं। मैंने कोड देखा है जहां हर गणना में केवल पूरे पेनी शामिल थे, फिर भी दोहरे उपयोग ने त्रुटियों को जन्म दिया! केवल गणितज्ञ ने इस मुद्दे को हटा दिया। तो मेरा अपरंपरागत उत्तर है, जब संभव हो, डबल और दशमलव दोनों को छोड़ दें।


3

यदि आपको अन्य भाषाओं या प्लेटफार्मों के साथ बाइनरी इंटरॉप की आवश्यकता है, तो आपको फ्लोट या डबल का उपयोग करने की आवश्यकता हो सकती है, जो मानकीकृत हैं।


2

नोट: यह पोस्ट http://csharpindepth.com/Articles/General/Decimal.aspx से दशमलव प्रकार की क्षमताओं की जानकारी पर आधारित है और मेरा मतलब है कि इसका क्या अर्थ है। मुझे लगता है कि डबल सामान्य IEEE डबल परिशुद्धता है।

नोट 2: इस पोस्ट में सबसे छोटी और सबसे बड़ी संख्या की भयावहता की पुष्टि होती है।

"दशमलव" के पेशेवरों।

  • "दशमलव" ठीक उसी संख्याओं का प्रतिनिधित्व कर सकता है जिसे (पर्याप्त रूप से छोटा) दशमलव अंशों के रूप में लिखा जा सकता है, डबल नहीं। यह वित्तीय नेतृत्व में महत्वपूर्ण है और इसी तरह जहां यह महत्वपूर्ण है कि परिणाम ठीक उसी तरह मेल खाते हैं जो एक मानव गणना कर रही है।
  • "दशमलव" में "डबल" की तुलना में बहुत बड़ा मंटिसा है। इसका अर्थ है कि सामान्यीकृत श्रेणी "दशमलव" के मानों के लिए डबल की तुलना में बहुत अधिक सटीकता होगी।

दशमलव के विपक्ष

  • यह बहुत धीमा होगा (मेरे पास बेंचमार्क नहीं है, लेकिन मैं कम से कम परिमाण के एक आदेश का अनुमान लगाऊंगा शायद अधिक), दशमलव को किसी भी हार्डवेयर त्वरण से लाभ नहीं होगा और इस पर अंकगणित को 10 की शक्तियों द्वारा अपेक्षाकृत महंगी गुणा / भाग की आवश्यकता होगी ( 2 की शक्तियों द्वारा गुणन और विभाजन की तुलना में कहीं अधिक महंगा है) इसके अलावा / घटाव से पहले घातांक का मिलान करना और गुणन / विभाजन के बाद घातांक को सीमा में वापस लाना।
  • दशमलव पहले दोगुना हो जाएगा। दशमलव केवल 96 2 96 -1 तक की संख्या का प्रतिनिधित्व कर सकता है । तुलनात्मक रूप से दोहरे लगभग। 2 1024 तक संख्याओं का प्रतिनिधित्व कर सकते हैं
  • दशमलव पहले से कम हो जाएगा। दशमलव में सबसे छोटी संख्याएं est 10 -28 हैं । तुलनात्मक रूप से दोहरे मानों का प्रतिनिधित्व 2 -149 (लगभग 10 -45 ) तक कर सकते हैं यदि उप-संख्याओं का समर्थन किया जाता है और 2 -126 (लगभग 10 -38 ) यदि वे नहीं हैं।
  • दशमलव दोगुनी से अधिक मेमोरी लेता है।

मेरी राय है कि आपको पैसे के काम के लिए "दशमलव" का उपयोग करने के लिए डिफ़ॉल्ट होना चाहिए और अन्य मामलों में जहां मानव गणना का मिलान बिल्कुल महत्वपूर्ण है और आपको शेष समय में अपने डिफ़ॉल्ट विकल्प के रूप में दोहरे उपयोग करना चाहिए।


2

इस पर निर्भर करता है कि आपको इसके लिए क्या चाहिए।

क्योंकि फ्लोट और डबल द्विआधारी डेटा प्रकार हैं जो आपके पास राउंड नंबरों के रास्ते में कुछ diifculties और irrors हैं, इसलिए उदाहरण के लिए डबल 0.1 से 0.100000001490116 तक गोल होगा, डबल भी 1/3 से 0.3333334326441 पर गोल होगा। सीधे शब्दों में कहें तो सभी वास्तविक संख्याओं का दोहरा प्रकारों में सटीक प्रतिनिधित्व नहीं होता है

सौभाग्य से C # तथाकथित दशमलव फ़्लोटिंग-पॉइंट अंकगणित का भी समर्थन करता है, जहाँ संख्याओं को बाइनरी सिस्टम के बजाय दशमलव संख्यात्मक प्रणाली के माध्यम से दर्शाया जाता है। इस प्रकार, दशमलव फ़्लोटिंग पॉइंट-अंकगणित फ़्लोटिंग पॉइंट नंबरों को संग्रहीत और संसाधित करते समय सटीकता नहीं खोता है । यह गणना के लिए काफी अनुकूल है जहां उच्च स्तर की सटीकता की आवश्यकता होती है।


0

यदि आप प्रदर्शन को शुद्धता से अधिक मानते हैं तो फ्लोटिंग पॉइंट का उपयोग करें।


6
दशमलव संख्या अधिक सही नहीं हैं, सिवाय कुछ सीमित मामलों में जो कभी-कभी (हमेशा किसी भी तरह से नहीं) महत्वपूर्ण होते हैं।
डेविड थॉर्नले

0

अपने आवेदन के प्रकार में चुनें। यदि आपको वित्तीय विश्लेषण में सटीकता की आवश्यकता है, तो आपने अपने प्रश्न का उत्तर दिया है। लेकिन अगर आपका आवेदन डबल के साथ आपके ओके के अनुमान के साथ निपट सकता है।

क्या आपके आवेदन को तीव्र गणना की आवश्यकता है या क्या आपके पास उत्तर देने के लिए दुनिया में हर समय होगा? यह वास्तव में आवेदन के प्रकार पर निर्भर करता है।

ग्राफिक भूख लगी है? फ्लोट या डबल पर्याप्त है। वित्तीय डेटा विश्लेषण, उल्का एक ग्रह की तरह सटीक परिशुद्धता? उन लोगों को थोड़ी सी सटीकता की आवश्यकता होगी :)


8
दशमलव संख्या के अनुमान भी हैं। वे वित्तीय अंकगणित के सम्मेलनों के अनुरूप हैं, लेकिन भौतिकी से जुड़ी गणनाओं में, इसमें कोई लाभ नहीं है।
डेविड थॉर्नले

0

दशमलव में व्यापक बाइट्स होते हैं, डबल सीपीयू द्वारा मूल रूप से समर्थित है। दशमांश बेस -10 है, इसलिए दशमलव की गणना करते समय दशमलव-से-डबल रूपांतरण हो रहा है।

For accounting - decimal
For finance - double
For heavy computation - double

ध्यान रखें .NET CLR केवल Math.Pow (डबल, डबल) का समर्थन करता है। दशमलव समर्थित नहीं है।

.NET फ्रेमवर्क 4

[SecuritySafeCritical]
public static extern double Pow(double x, double y);

0

एक डबल मान डिफ़ॉल्ट रूप से वैज्ञानिक संकेतन को अनुक्रमित करेगा यदि वह संकेतन दशमलव प्रदर्शन से छोटा है। (उदाहरण .00000003 3e-8 होगा) दशमलव मान कभी भी वैज्ञानिक अंकन के लिए अनुक्रमित नहीं होगा। जब बाहरी पार्टी द्वारा खपत के लिए क्रमबद्ध करना, यह एक विचार हो सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.