দশমিকের পরিবর্তে আমার কখন ডাবল ব্যবহার করা উচিত?


265

আমি double(বা।) ব্যবহারের তিনটি সুবিধার নাম বলতে পারিfloat পরিবর্তে )decimal :

  1. স্মৃতিশক্তি কম ব্যবহার করে।
  2. দ্রুততর কারণ ভাসমান পয়েন্ট গণিত ক্রিয়াকলাপগুলি প্রসেসর দ্বারা স্থানীয়ভাবে সমর্থিত।
  3. সংখ্যার বৃহত্তর পরিসীমা উপস্থাপন করতে পারে।

তবে এই সুবিধাগুলি কেবল গণনার নিবিড় ক্রিয়াকলাপগুলিতে যেমন প্রযোজ্য মডেলিং সফ্টওয়্যারগুলিতে পাওয়া যায় তেমন প্রয়োগ হয়। অবশ্যই নির্ভুলতার প্রয়োজনে ডাবলস ব্যবহার করা উচিত নয়, যেমন আর্থিক গণনা। তাহলে কি কখনও "স্বাভাবিক" অ্যাপ্লিকেশনগুলির পরিবর্তে double(বা float) বেছে নেওয়ার কোনও ব্যবহারিক কারণ রয়েছে decimal?

যুক্ত করতে সম্পাদিত: দুর্দান্ত প্রতিক্রিয়াগুলির জন্য ধন্যবাদ, আমি তাদের কাছ থেকে শিখেছি।

আরও একটি প্রশ্ন: কয়েকজন লোক এই বিষয়টি তৈরি করেছিল যে ডাবলগুলি আরও সঠিকভাবে প্রকৃত সংখ্যা উপস্থাপন করতে পারে। ঘোষিত হলে আমি ভাবব যে তারা সাধারণত আরও নিখুঁতভাবে তাদের প্রতিনিধিত্ব করে। কিন্তু ভাসমান পয়েন্ট অপারেশনগুলি সম্পাদন করার সময় এটি কী সত্য বিবৃতি দেয় যা সঠিকতা হ্রাস পেতে পারে (কখনও কখনও উল্লেখযোগ্যভাবে)?



5
এটি নিয়মিতভাবে উত্সাহিত হয় এবং আমি এখনও এটির সাথে লড়াই করি। উদাহরণস্বরূপ, আমি এমন একটি অ্যাপ্লিকেশন নিয়ে কাজ করছি যা আর্থিক গণনা করে তাই আমি ডেসিমাল জুড়ে ব্যবহার করি। তবে ম্যাথ এবং ভিজ্যুয়াল বেসিক.ফিনান্সিয়াল ফাংশনগুলি দ্বিগুণ ব্যবহার করে তাই অনেকগুলি রূপান্তরিত হয় যা দশমিকের ব্যবহার সম্পর্কে আমার ধারাবাহিকভাবে অনুমান করে constantly
জ্যামি আইডে

@ জ্যামিআইডি যে পাগল আর্থিক ফাংশনগুলি দ্বিগুণ ব্যবহার করে, অর্থ সবসময় দশমিক হতে হবে।
ক্রিস মেরিসিক

@ ক্রিসমারিসিক তবে জ্যামি আইডিতে ডাবল ব্যবহার করে লিগ্যাসি ক্রাপের সাথে কী কাজ করতে পারে? তারপরে আপনার দ্বিগুণ ব্যবহার করা উচিত অন্যথায় অনেকগুলি রূপান্তর গোলাকার ত্রুটির কারণ হতে পারে ... তিনি ভিজ্যুয়াল বেসিক পিএফএফএফ উল্লেখ করেছেন এতে কোনও আশ্চর্য হওয়ার কিছু নেই ...
এলিজাবেথ

ইলিশাবেথ আমি সম্ভবত একটি ভিন্ন লাইব্রেরি ব্যবহার করব যা সঠিকভাবে দশমিক সমর্থন করে। ভিজ্যুয়াল বেসিক.ফিনান্সিয়াল যেগুলি সরবরাহ করে সম্ভবত আজ অন্য একাধিক গ্রন্থাগারে রয়েছে
ক্রিস মেরিসিক

উত্তর:


306

আমি মনে করি আপনি সুবিধার সংক্ষিপ্তসারটি বেশ ভালভাবে করেছেন। তবে আপনি একটি পয়েন্ট মিস করছেন। decimalটাইপ প্রতিনিধিত্বমূলক শুধুমাত্র আরো যথাযথ তা বেস 10 নম্বর (যেমন মুদ্রা / আর্থিক হিসাব ব্যবহার করা হয়)। সাধারণভাবে, doubleটাইপটি কমপক্ষে দুর্দান্ত নির্ভুলতা হিসাবে প্রস্তাব দিচ্ছে (কেউ যদি আমার ভুল হয় তবে আমাকে সংশোধন করে) এবং নির্বিচারে আসল সংখ্যার জন্য অবশ্যই আরও বেশি গতি speed সহজ উপসংহারটি হ'ল: কোনটি ব্যবহার করবেন তা বিবেচনা করার সময়, doubleআপনার প্রস্তাবিত base 10নির্ভুলতার প্রয়োজন না হলে সর্বদা ব্যবহার করুন decimal

সম্পাদনা:

ক্রিয়াকলাপের পরে ভাসমান-পয়েন্ট সংখ্যাগুলির যথার্থতা হ্রাস সম্পর্কে আপনার অতিরিক্ত প্রশ্ন সম্পর্কে, এটি কিছুটা আরও সূক্ষ্ম ইস্যু। প্রকৃতপক্ষে, নির্ভুলতা (আমি এখানে নির্ভুলতার জন্য বিনিময়যোগ্য শব্দটি ব্যবহার করি) প্রতিটি ক্রিয়াকলাপ সম্পাদন করার পরে অবিচ্ছিন্নভাবে হ্রাস পাবে। এই দুটি কারণে কারণে:

  1. সত্য যে নির্দিষ্ট সংখ্যা (বেশিরভাগ স্পষ্টত দশমিক) সত্যিকারের ভাসমান পয়েন্ট আকারে উপস্থাপন করা যায় না
  2. গোল করার ত্রুটিগুলি ঘটে থাকে, ঠিক যেমন আপনি হাতে হাতে গণনা করছেন। এটি ত্রুটিগুলি যথেষ্ট চিন্তাধারার পক্ষে যথেষ্ট তাত্পর্যপূর্ণ কিনা তা প্রসঙ্গে (আপনি কতটি অপারেশন করছেন আপনি) উপর নির্ভরশীল।

সমস্ত ক্ষেত্রে, আপনি যদি দুটি ভাসমান-বিন্দু সংখ্যার তুলনা করতে চান যা তাত্ত্বিকভাবে সমতুল্য হওয়া উচিত (তবে বিভিন্ন গণনা ব্যবহার করে এসেছিলেন), আপনাকে কিছুটা সহনশীলতার অনুমতি দিতে হবে (কতটা পরিবর্তিত হয় তবে সাধারণত খুব ছোট) ।

সুনির্দিষ্ট ক্ষেত্রে ত্রুটিগুলি চিহ্নিত করা যেতে পারে সেই ক্ষেত্রগুলির আরও বিশদ বিবরণ জন্য, উইকিপিডিয়া নিবন্ধের নির্ভুলতা বিভাগটি দেখুন । অবশেষে, আপনি যদি মেশিন স্তরে ভাসমান-পয়েন্ট সংখ্যা / ক্রিয়াকলাপের গুরুত্বের সাথে গভীরতার (এবং গাণিতিক) আলোচনা চান, তবে প্রতিটি কম্পিউটার বিজ্ঞানী ভাসমান-পয়েন্ট অ্যাারিমেটিক সম্পর্কে কী জানতে হবে তা লেখার চেষ্টা করুন ।


1
বেস 2 তে রূপান্তর করার সময় যথাযথতা হারিয়ে যাওয়া কোন বেস 10 সংখ্যার একটি উদাহরণ, ই সরবরাহ করতে পারেন?
মার্ক সিডিয়েড

@ মার্ক: 1.000001 একটি উদাহরণ, কমপক্ষে জন স্কিট অনুসারে। (এই পৃষ্ঠার প্রশ্ন দেখতে পাবেন 3: yoda.arachsys.com/csharp/teasers-answers.html )
Noldorin

25
@ মার্ক: খুব সাধারণ উদাহরণ: 0.1 বেস 2 এ পর্যায়ক্রমিক ভগ্নাংশ তাই এটি একটিতে যথাযথভাবে প্রকাশ করা যায় না double। আধুনিক কম্পিউটারগুলি এখনও সঠিক মানটি মুদ্রণ করবে তবে ফলাফলের কারণেই তারা "অনুমান" করে - এটি সত্যিকার অর্থে সঠিকভাবে প্রকাশ করার কারণে নয়।
কনরাড রুডল্ফ

1
দ্য Decimalম্যান্টিসায় ধরণের যথার্থতার 93-বিট রয়েছে, প্রায় 52 টির তুলনায় double। আমি আশা করি মাইক্রোসফ্ট আইইইই 80-বিট ফর্ম্যাটকে সমর্থন করে, যদিও এটি 16 বাইটে প্যাড করতে হয়েছিল; এটা একটি বড় ব্যাপ্তি অনুমতি দেওয়া হবে চেয়ে doubleবা Decimal, অনেক ভালো গতি চেয়ে Decimalতুরীয় অপারেশন জন্য সমর্থন (যেমন পাপ (x) এর, লগ (x) এর, ইত্যাদি), এবং স্পষ্টতা যা যখন না বেশ ভাল হিসাবে হিসাবে, Decimalবেশী ভালো উপায় হতে হবে double
সুপারক্যাট

@ চ্যারলোট: আপনি যদি আমার সম্পূর্ণ পোস্টটি পড়েন তবে দেখবেন যে এটি ব্যাখ্যা করা হয়েছে।
নলডোরিন

59

ভাসমান পয়েন্ট ধরণের ব্যবহারের সুবিধাগুলি নিয়ে আপনি স্পষ্ট মনে করছেন। আমি সব ক্ষেত্রে দশমিকের জন্য নকশার ঝোঁক রেখেছি এবং দশমিকের ক্রিয়াকলাপ বাধা বা স্লো-ডাউনগুলি ঘটছে কিনা তা জানতে আমাকে একটি প্রোফাইলারের উপর নির্ভর করি। এই ক্ষেত্রে, আমি দ্বিগুণ বা ভাসতে "ডাউন কাস্ট" করব, তবে কেবল এটি অভ্যন্তরীণভাবে করব এবং সাবধানতার সাথে গাণিতিক ক্রিয়াকলাপে উল্লেখযোগ্য অঙ্কের সংখ্যা সীমাবদ্ধ করে নির্ভুলতা ক্ষতি পরিচালনা করার চেষ্টা করব।

সাধারণভাবে, যদি আপনার মানটি ক্ষণস্থায়ী হয় (পুনরায় ব্যবহৃত না হয়) তবে আপনি ভাসমান পয়েন্টের ধরণটি ব্যবহার করা নিরাপদ। ভাসমান পয়েন্টের ধরণের সমস্যাগুলির সাথে আসল সমস্যাটি হ'ল নিম্নলিখিত তিনটি পরিস্থিতি।

  1. আপনি ভাসমান পয়েন্টের মানগুলিকে একত্রিত করছেন (সেক্ষেত্রে যথাযথ ত্রুটিগুলি যৌগিক)
  2. আপনি ভাসমান পয়েন্ট মানের উপর ভিত্তি করে মানগুলি তৈরি করেন (উদাহরণস্বরূপ পুনরাবৃত্ত আলগোরিদিম হিসাবে)
  3. আপনি খুব বিশাল সংখ্যক উল্লেখযোগ্য অঙ্ক সহ গণিত করছেন (উদাহরণস্বরূপ 123456789.1 * .000000000000000987654321)

সম্পাদনা

সি # দশমিকের রেফারেন্স ডকুমেন্টেশন অনুসারে :

দশমিক শব্দ একটি 128-বিট ডাটা টাইপ উল্লেখ করে। ভাসমান-পয়েন্টের ধরণের তুলনায়, দশমিক ধরণের একটি বৃহত্তর নির্ভুলতা এবং একটি ছোট পরিসীমা থাকে, যা এটি আর্থিক এবং আর্থিক গণনার জন্য উপযুক্ত করে তোলে।

সুতরাং আমার উপরের বক্তব্যটি স্পষ্ট করতে:

আমি সব ক্ষেত্রে দশমিকের জন্য নকশার ঝোঁক রেখেছি এবং দশমিকের ক্রিয়াকলাপ বাধা বা স্লো-ডাউনগুলি ঘটছে কিনা তা জানতে আমাকে একটি প্রোফাইলারের উপর নির্ভর করি।

আমি কেবল কখনও এমন শিল্পগুলিতে কাজ করেছি যেখানে দশমিকগুলি অনুকূল হয়। আপনি যদি ফিজিক্স বা গ্রাফিক্স ইঞ্জিনগুলিতে কাজ করছেন তবে সম্ভবত একটি ভাসমান পয়েন্ট টাইপের (ফ্লোট বা ডাবল) নকশা করা আরও বেশি উপকারী।

দশমিক অসীম সুনির্দিষ্ট নয় (কোনও প্রাথমিক তথ্য প্রকারে অ-ইন্টিগ্রালের জন্য অসীম নির্ভুলতার প্রতিনিধিত্ব করা অসম্ভব) তবে এটি দ্বিগুণের চেয়ে অনেক বেশি নির্ভুল:

  • দশমিক = 28-29 উল্লেখযোগ্য সংখ্যা
  • ডাবল = 15-16 উল্লেখযোগ্য সংখ্যা
  • ভাসা = 7 উল্লেখযোগ্য সংখ্যা

সম্পাদনা 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

আপনি দেখতে পাচ্ছেন, যদিও আমরা একই উত্স থেকে ধ্রুবক যোগ করছি, দ্বিগুণের ফলাফল কম সুনির্দিষ্ট (যদিও সম্ভবত সঠিকভাবে গোল হবে), এবং ভাসমানটি এত কম সুনির্দিষ্ট, যেখানে এটি কেবল হ্রাস পেয়েছে been দুটি উল্লেখযোগ্য সংখ্যা।


1
পয়েন্ট 1 ভুল। যথার্থ / বৃত্তাকার ত্রুটি কেবল কাস্টিংয়ে ঘটে, গণনায় নয়। এটা তোলে হয় সঠিক অবশ্যই যে অধিকাংশ গাণিতিক অপারেশন অস্থির হয়, এইভাবে ত্রুটি বংশ বিস্তার করেন। তবে এটি অন্য একটি সমস্যা এবং এটি সীমিত নির্ভুলতার সমস্ত ডেটা ধরণের ক্ষেত্রে একই প্রয়োগ করে, তাই বিশেষত দশমিকের জন্য।
কনরাড রুডল্ফ

1
@ কনরাড রুডল্ফ, "আইডিটি 2" তে আমি যে আইটেমটি তৈরি করতে চাইছিলাম তার প্রমাণ হিসাবে উদাহরণটি দেখুন 1 প্রায়শই, এই সমস্যাটি নিজেকে প্রকাশ করে না কারণ ইতিবাচক অনর্থনকে নেতিবাচক অনর্থের সাথে ভারসাম্য বজায় রাখে এবং তারা ধুয়ে ফেলেন সমষ্টিগত, তবে একই সংখ্যাকে একত্রিত করা (উদাহরণ হিসাবে আমি যেমন করেছি) সমস্যাটিকে হাইলাইট করে।
মাইকেল মিডোস

দুর্দান্ত উদাহরণ। এটি কেবলমাত্র আমার জুনিয়র বিকাশকারীকে দেখিয়েছিলেন, বাচ্চারা অবাক হয়েছিল।
মাচাদো

এখন আপনি 3/5-এর পরিবর্তে 2/3 য় ভাগ একই জিনিস করতে পারেন ... আপনার যৌনতা সংক্রান্ত সংখ্যা পদ্ধতি সম্পর্কে শিখতে হবে যা 2/3 য় পুরোপুরি সূক্ষ্মভাবে পরিচালনা করে।
gnasher729

1
@ gnasher729, 3 / 5th এর পরিবর্তে 2 / 3rds ব্যবহার করা বিভিন্ন ধরণের জন্য পুরোপুরি সূক্ষ্মভাবে পরিচালিত হয়নি । মজার ব্যাপার হল, Single: 667660.400000000000দশমিক মান ফলনের সময় ভাসমান মানটি পেয়েছিল Decimal: 666666.7000000000। সঠিক মানের তুলনায় ভাসমানের মান এক হাজারের চেয়ে কিছুটা কম।
ঝিনেঞ্জার

25

দশমিক 10 মানগুলির জন্য দশমিক ব্যবহার করুন, যেমন অন্যদের পরামর্শ অনুসারে আর্থিক গণনা।

তবে ডাবল সাধারণভাবে নির্বিচার গণনা করা মানগুলির জন্য আরও সঠিক।

উদাহরণস্বরূপ আপনি যদি কোনও পোর্টফোলিওতে প্রতিটি লাইনের ওজন গণনা করতে চান তবে ডাবল ব্যবহার করুন ফলাফলটি প্রায় 100% পর্যন্ত যোগ করবে।

নিম্নলিখিত উদাহরণে, ডাবলরসাল্ট দশমিক ফলাফলের তুলনায় 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
যথার্থতা দশমিকের একমাত্র সুবিধা, এটি সঠিক this দশমিকের চেয়ে বেশি ভাসমান পয়েন্ট সংখ্যা কখন ব্যবহার করা উচিত তা আপনাকে জিজ্ঞাসা করা উচিত নয়। এটা আপনার প্রথম চিন্তা করা উচিত। তখন প্রশ্নটি যখন আপনার দশমিক ব্যবহার করা উচিত (এবং উত্তরটি এখানে ঠিক আছে ... যখন নির্ভুলতার বিষয়টি গুরুত্বপূর্ণ)।
ইনস্ট্যান্স হান্টার

3
@ ড্যানিয়েল সোজা, এটি মজার, তবে আমার বিপরীত মতামত রয়েছে। আমি মনে করি এর কার্যকারিতা বৈশিষ্ট্যগুলির কারণে কম সুনির্দিষ্ট প্রকারটি ব্যবহার করা একটি প্রাক-বাধা হিসাবে সমান। আপনার সম্ভাব্যতার সুবিধাগুলি উপলব্ধি করার আগে আপনাকে বহুবার ছাড় দিতে হবে।
মাইকেল Meadows

3
@ মিশেল মিডাউস, আমি এই যুক্তিটি বুঝতে পারি। যদিও লক্ষণীয় কিছু হ'ল অকাল অপটিমাইজেশনের সাথে অন্যতম প্রধান অভিযোগ হ'ল প্রোগ্রামাররা কী ধীর হতে চলেছে তা জানার ঝোঁক নেই। আমরা কোনও সন্দেহ ছাড়াই জানি, যদিও, দশমিকের দ্বিগুণের চেয়ে ধীর। তবুও, আমি মনে করি বেশিরভাগ ক্ষেত্রেই, পারফরম্যান্সের উন্নতি কোনওভাবেই ব্যবহারকারীর কাছে লক্ষণীয় হবে না। অবশ্যই, বেশিরভাগ ক্ষেত্রে, নির্ভুলতার প্রয়োজন হয় না। হেহ।
ইনস্ট্যান্স হান্টার

দশমিক ভাসমান-পয়েন্টটি একই সংখ্যক বিট ব্যবহার করে বাইনারি ফ্লোটিং-পয়েন্টের চেয়ে কম সুনির্দিষ্ট। দশমিক সুবিধাটি হ'ল 0.01 এর মতো ডেসিমাল ভগ্নাংশগুলি হুবহু উপস্থাপন করতে সক্ষম হয় যা আর্থিক গণনায় সাধারণ।
dan04

ঠিক আছে, এটি পুরোপুরি সঠিক নয় :) - অনেকগুলি গেমগুলিতে ভাসমান-পয়েন্ট সংখ্যাগুলি অনাকাঙ্ক্ষিত হতে পারে, কারণ এটি ক্রমাগত নয়। এখানে
ব্লুরাজা - ড্যানি প্লেফুঘুফ্ট

4

কিছু অ্যাকাউন্টিংয়ে পরিবর্তে বা সম্মিলিতভাবে অবিচ্ছেদ্য ধরণের ব্যবহারের সম্ভাবনা বিবেচনা করুন। উদাহরণস্বরূপ, বলুন যে আপনি যে নিয়মগুলি অধীনে পরিচালনা করেন সেগুলির জন্য প্রতিটি গণনার ফলাফলের জন্য কমপক্ষে 6 দশমিক স্থানের সাথে এগিয়ে চলতে হবে এবং চূড়ান্ত ফলাফলটি নিকটতম পেনিতে গোল করা হবে।

$ 100 এর 1 / of calc এর গণনা 66 16.66666666666666 ... দেয়, সুতরাং একটি কার্যপত্রকটিতে চালিত মানটি 16.666667 ডলার হবে। ডাবল এবং দশমিক উভয় ক্ষেত্রেই 6 টি দশমিক স্থানে সঠিক ফল পাওয়া উচিত। তবে, ফলাফলটিকে পূর্ণসংখ্যার হিসাবে এগিয়ে নিয়ে যাওয়ার মাধ্যমে আমরা কোনও ক্রমগত ত্রুটি এড়াতে পারি Each উদাহরণস্বরূপ, আমি এই পরিমাণে টেক্সাস বিক্রয় কর গণনা করছি (16666667 * .0825 = 1375000)। দুটি যুক্ত করা (এটি একটি সংক্ষিপ্ত ওয়ার্কশিট) 1666667 + 1375000 = 18041667. দশমিক পয়েন্টটি পিছনে সরিয়ে নেওয়া আমাদের 18.041667 বা $ 18.04 দেয়।

যদিও এই সংক্ষিপ্ত উদাহরণটি দ্বিগুণ বা দশমিক ব্যবহার করে সংশ্লেষমূলক ত্রুটি অর্জন করবে না, কেবলমাত্র ডাবল বা দশমিক গণনা করা এবং এগিয়ে নিয়ে যাওয়া ক্ষেত্রে তাত্পর্যপূর্ণ ত্রুটি জমেছে এমন ঘটনাগুলি প্রদর্শন করা মোটামুটি সহজ। আপনি যে নিয়মগুলির অধীনে পরিচালনা করেন তার জন্য যদি দশমিক স্থানে সীমিত সংখ্যক প্রয়োজন হয়, প্রতিটি মানকে 10 ^ (দশমিক স্থানে প্রয়োজনীয় #) দ্বারা গুণ করে পূর্ণসংখ্যার হিসাবে সংরক্ষণ করা হয় এবং তারপরে আসল পেতে 10% (দশমিক জায়গাগুলির প্রয়োজনীয় #) দ্বারা বিভাজন করা হয় মান কোনও ক্রমগত ত্রুটি এড়াতে পারে।

যে পরিস্থিতিতে পেনিগুলির ভগ্নাংশ ঘটে না (উদাহরণস্বরূপ, একটি ভেন্ডিং মেশিন), অ-অবিচ্ছেদ্য প্রকারগুলি মোটেও ব্যবহার করার কোনও কারণ নেই। কেবল এটিকে ডলার হিসাবে গণনা করা পেনি হিসাবে বিবেচনা করুন। আমি এমন কোড দেখেছি যেখানে প্রতিটি গণনা শুধুমাত্র পুরো পেনিগুলিকে জড়িত করে, তবুও দ্বিগুণ ব্যবহারের ফলে ত্রুটি হয়েছিল! পূর্ণসংখ্যা কেবল গণিতটি সমস্যাটি সরিয়ে ফেলে। সুতরাং আমার অপ্রচলিত উত্তরটি হ'ল সম্ভব হলে ডাবল এবং দশমিক উভয়ই রেখে যান।


3

আপনার যদি অন্য ভাষাগুলি বা প্ল্যাটফর্মগুলির সাথে বাইনারি ইন্টারফের প্রয়োজন হয় তবে আপনার ভাসমান বা ডাবল ব্যবহার করতে হবে যা মানকযুক্ত।


2

দ্রষ্টব্য: এই পোস্টটি http://csharpindepth.com/Articles/ জেনারাল / ডেসিমাল.এএসপিএক্স থেকে দশমিক ধরণের ক্ষমতার তথ্যের উপর এবং এর অর্থ কী তা আমার নিজের ব্যাখ্যা অনুসারে। আমি ধরে নেব ডাবলটি স্বাভাবিক আইইইই ডাবল নির্ভুলতা।

দ্রষ্টব্য 2: এই পোস্টের মধ্যে সবচেয়ে ছোট এবং বৃহত্তম এই সংখ্যার বিশালতায় রেফার করে।

"দশমিক" এর পেশাদার

  • "দশমিক" হ'ল সংখ্যার প্রতিনিধিত্ব করতে পারে যা দশমিক ভগ্নাংশ হিসাবে লেখা যেতে পারে, দ্বিগুণ হতে পারে না। এটি আর্থিক খাতায় গুরুত্বপূর্ণ এবং অনুরূপ যেখানে এটি গুরুত্বপূর্ণ যে ফলাফলগুলি হুবহু হিসাব করা কোনও মানুষ কী দেবে তা মিলবে।
  • "দশমিক" এর "ডাবল" এর চেয়ে অনেক বড় ম্যান্টিসা রয়েছে। এর অর্থ হল যে এর স্বাভাবিক মানের মধ্যে "দশমিক" মানের দ্বিগুণের চেয়ে অনেক বেশি নির্ভুলতা থাকবে।

দশমিক ধারণা

  • এটি অনেক ধীরে ধীরে হবে (আমার কাছে বেঞ্চমার্ক নেই তবে আমি কমপক্ষে আরও বেশি পরিমাণের ক্রম অনুমান করতে পারি), দশমিকের কোনও হার্ডওয়্যার ত্বরণ থেকে কোনও উপকার হবে না এবং এতে গাণিতিকের তুলনায় 10 এর ক্ষমতার দ্বারা অপেক্ষাকৃত ব্যয়বহুল গুণ / বিভাগের প্রয়োজন হবে ( যোগফল / বিয়োগের পূর্বে এক্সপোশনটির সাথে মেলে এবং গুণক / বিভাগের পরে এক্সপোনেন্টটিকে আবার পরিসরে নিয়ে আসা যা 2 এর শক্তির দ্বারা গুণ এবং বিভাজনের চেয়ে অনেক বেশি ব্যয়বহুল।
  • দশমিক পূর্বে উপচে পড়বে থা ডাবল ইচ্ছা। দশমিক কেবলমাত্র 96 2 96 -1 পর্যন্ত সংখ্যা উপস্থাপন করতে পারে । তুলনা করে ডাবল প্রায় ± 2 1024 পর্যন্ত সংখ্যা উপস্থাপন করতে পারে
  • দশমিক পূর্বে নিমজ্জিত হবে। দশমিকের মধ্যে সবচেয়ে ছোট সংখ্যাগুলি প্রতিনিধিত্বযোগ্য-10 -28 । তুলনামূলকভাবে ডাবল 2 -149 (প্রায় 10 -45 ) এর নিচে মান উপস্থাপন করতে পারে যদি সাবর্মোমল সংখ্যাগুলি সমর্থিত হয় এবং 2 -126 (প্রায় 10 -38) ) যদি তা না থাকে।
  • দশমিক দ্বিগুণ হিসাবে মেমরির দ্বিগুণ গ্রহণ করে।

আমার অভিমত হ'ল মানি কাজের জন্য এবং অন্যান্য ক্ষেত্রে যেখানে "ডেসিমাল" ব্যবহার করা উচিত সেখানে মানব গণনার সাথে মিলে যাওয়া গুরুত্বপূর্ণ এবং বাকি সময়টি আপনার ডিফল্ট পছন্দ হিসাবে দ্বিগুণ ব্যবহার করা উচিত।


2

আপনার যা প্রয়োজন তা নির্ভর করে।

কারণ ভাসা এবং ডাবল হ'ল বাইনারি ডেটা ধরণের আপনার কিছু রয়েছে রাউন্ড সংখ্যার পথে ভুল এবং ত্রুটি রয়েছে, উদাহরণস্বরূপ ডাবলটি 0.1 থেকে 0.100000001490116 এর মতো হবে, ডাবলটি 1/3 থেকে 0.33333334326441 এরও গোল হবে। সহজভাবে বলা যায় না যে সমস্ত আসল সংখ্যার দ্বিগুণ ধরণের সঠিক প্রতিনিধিত্ব থাকে

ভাগ্যক্রমে সি # তথাকথিত দশমিক ভাসমান-পয়েন্ট গণিতকেও সমর্থন করে, যেখানে বাইনারি সিস্টেমের পরিবর্তে দশমিক সংখ্যা ব্যবস্থার মাধ্যমে সংখ্যাগুলি উপস্থাপন করা হয়। সুতরাং, ভাসমান-পয়েন্ট সংখ্যাগুলি সংরক্ষণ এবং প্রক্রিয়াকরণের সময় দশমিক ভাসমান পয়েন্ট-পাটিগণিত সঠিকতা হারাবেন না । এটি এটিকে গণনার পক্ষে অত্যন্ত উপযুক্ত করে তোলে যেখানে উচ্চ স্তরের নির্ভুলতার প্রয়োজন।


0

আপনি যদি নির্ভুলতার চেয়ে পারফরম্যান্সকে মূল্য দেন তবে ভাসমান পয়েন্টগুলি ব্যবহার করুন।


6
দশমিক সংখ্যাগুলি আরও সঠিক নয়, কিছু নির্দিষ্ট সীমিত ক্ষেত্রে বাদে যা কখনও কখনও (কোনওভাবেই সর্বদা গুরুত্বপূর্ণ নয়) গুরুত্বপূর্ণ।
ডেভিড থর্নলি

0

আপনার অ্যাপ্লিকেশন ফাংশন টাইপ চয়ন করুন। আপনার যদি আর্থিক বিশ্লেষণের মতো নির্ভুলতার প্রয়োজন হয় তবে আপনি আপনার প্রশ্নের উত্তর দিয়েছেন। তবে যদি আপনার অ্যাপ্লিকেশনটি কোনও অনুমানের সাথে নিষ্পত্তি করতে পারে তবে ডাবল দিয়ে আপনার ঠিক আছে।

আপনার অ্যাপ্লিকেশনটির কি দ্রুত গণনার প্রয়োজন আছে বা বিশ্বের একটি উত্তর দেওয়ার জন্য তাঁর কাছে সর্বদা সময় থাকবে? এটি আবেদনের ধরণের উপর নির্ভর করে।

গ্রাফিক ক্ষুধার্ত? ভাসা বা ডাবল যথেষ্ট আর্থিক তথ্য বিশ্লেষণ, উল্কারা গ্রহের ধরণের নির্ভুলতা অনুধাবন করে? এগুলির জন্য কিছুটা নির্ভুলতা প্রয়োজন :)


8
দশমিক সংখ্যাগুলিও অনুমান। এগুলি আর্থিক গাণিতিকের সম্মেলনের সাথে সামঞ্জস্যপূর্ণ, তবে পদার্থবিদ্যার সাথে জড়িত গণনাগুলির কোনও লাভ নেই।
ডেভিড থর্নলি

0

দশমিকের বিস্তৃত বাইট রয়েছে, ডাবল স্থানীয়ভাবে সিপিইউ দ্বারা সমর্থিত। দশমিকটি বেস -10, সুতরাং দশমিক থেকে দ্বিগুণ রূপান্তর ঘটে যখন দশমিক সংখ্যার হয়।

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

মনে রাখবেন। নেট সিএলআর শুধুমাত্র ম্যাথ.পাউ (ডাবল, ডাবল) সমর্থন করে। দশমিক সমর্থিত নয়।

.NET ফ্রেমওয়ার্ক 4

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

0

দ্বিগুণ মানগুলি ডিফল্ট হিসাবে বৈজ্ঞানিক স্বরলিপিতে ক্রমিকায়িত হবে যদি সেই স্বরলিপি দশমিক প্রদর্শনের চেয়ে কম হয়। (যেমন .00000003 3e-8 হবে) দশমিক মানগুলি কখনই বৈজ্ঞানিক স্বরলিপিতে সিরিয়ালায়িত হয় না। কোনও বাহ্যিক পক্ষের দ্বারা গ্রাহ্য করার জন্য সিরিয়ালকরণ করার সময়, এটি বিবেচনা হতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.