মধ্যে পার্থক্য কি decimal
, float
এবং double
.NET মধ্যে?
কেউ কখন এই একটি ব্যবহার করবে?
মধ্যে পার্থক্য কি decimal
, float
এবং double
.NET মধ্যে?
কেউ কখন এই একটি ব্যবহার করবে?
উত্তর:
float
এবং double
করছে ভাসমান বাইনারি বিন্দু ধরনের । অন্য কথায় তারা এ জাতীয় সংখ্যক প্রতিনিধিত্ব করে:
10001.10010110011
বাইনারি নম্বর এবং বাইনারি পয়েন্টের অবস্থান উভয়ই মানের মধ্যে এনকোড করা থাকে।
decimal
এক ভাসমান দশমিক পয়েন্ট টাইপ । অন্য কথায় তারা এ জাতীয় সংখ্যক প্রতিনিধিত্ব করে:
12345.65789
আবার, দশমিক পয়েন্টের সংখ্যা এবং অবস্থান উভয়ই মূল্যের মধ্যে এনকোডড থাকে - এটি decimal
স্থির বিন্দুর প্রকারের পরিবর্তে এখনও একটি ভাসমান পয়েন্ট টাইপ করে।
লক্ষণীয় গুরুত্বপূর্ণ বিষয় হ'ল মানুষ দশমিক আকারে অ-পূর্ণসংখ্যার প্রতিনিধিত্ব করতে ব্যবহৃত হয় এবং দশমিক প্রতিনিধিত্বের সঠিক ফলাফল আশা করে; সমস্ত দশমিক সংখ্যা বাইনারি ভাসমান বিন্দুতে যথাযথভাবে উপস্থাপনযোগ্য নয় - উদাহরণস্বরূপ, - সুতরাং যদি আপনি একটি বাইনারি ভাসমান বিন্দু মান ব্যবহার করেন তবে আপনি বাস্তবে 0.1 এর কাছাকাছি পাবেন। ভাসমান দশমিক বিন্দুটি ব্যবহার করার সময় আপনি এখনও আনুমানিকতা পাবেন - উদাহরণস্বরূপ, 1 দ্বারা 3 বিভাজনের ফলাফলকে ঠিক উপস্থাপন করা যায় না।
কখন কী ব্যবহার করবেন:
"প্রাকৃতিকভাবে সঠিক দশমিক" মানগুলির জন্য এটি ব্যবহার করা ভাল decimal
। এটি মানুষের দ্বারা উদ্ভাবিত যে কোনও ধারণার জন্য সাধারণত উপযুক্ত: আর্থিক মূল্যবোধগুলি সর্বাধিক সুস্পষ্ট উদাহরণ, তবে অন্যগুলিও রয়েছে। উদাহরণস্বরূপ, ডুবুরি বা আইস স্কেটারগুলিকে দেওয়া স্কোরটি বিবেচনা করুন।
মান যা প্রকৃতির আরো শিল্পকর্ম যা সত্যিই না পরিমাপ করা যায় তাদের জন্য ঠিক যাহাই হউক না কেন, float
/ double
আরো উপযুক্ত হয়। উদাহরণস্বরূপ, বৈজ্ঞানিক তথ্য সাধারণত এই ফর্মটিতে উপস্থাপন করা হবে। এখানে, মূল মানগুলি শুরু করার সাথে "দশমিকভাবে সঠিক" হবে না, সুতরাং প্রত্যাশিত ফলাফলগুলির জন্য "দশমিক নির্ভুলতা" বজায় রাখা গুরুত্বপূর্ণ নয়। দশমিকের তুলনায় ভাসমান বাইনারি পয়েন্টের ধরণের কাজগুলি আরও দ্রুত।
float
/ double
সাধারণত সংখ্যার প্রতিনিধিত্ব করবেন না 101.101110
, সাধারণত এটি এমন কিছু হিসাবে উপস্থাপিত হয় 1101010 * 2^(01010010)
- একটি ঘোষক
float
এটি একটি সি # ওরফে কীওয়ার্ড এবং। নেট টাইপ নয়। এটি System.Single
.. single
এবং double
বাইনারি পয়েন্ট ধরণের ভাসমান হয়।
যথার্থতা মূল পার্থক্য।
ভাসা - 7 ডিজিট (32 বিট)
ডাবল -15-16 ডিজিট (64 বিট)
দশমিক -28-29 উল্লেখযোগ্য সংখ্যা (128 বিট)
দশমিকের উচ্চতর নির্ভুলতা থাকে এবং সাধারণত আর্থিক অ্যাপ্লিকেশনগুলির মধ্যে ব্যবহৃত হয় যার জন্য উচ্চতর ডিগ্রি নির্ভুলতার প্রয়োজন হয়। দশমিকগুলি ডাবল / ফ্লোটের চেয়ে অনেক ধীর (কিছু পরীক্ষায় 20 এক্স পর্যন্ত) are
দশমিক এবং ভাসমান / ডাবলকে কাস্ট ব্যতীত তুলনা করা যায় না যেখানে ফ্লোটস এবং ডাবলস পারে। দশমিকগুলিও এনকোডিং বা পিছনের শূন্যগুলিকে অনুমতি দেয়।
float flt = 1F/3;
double dbl = 1D/3;
decimal dcm = 1M/3;
Console.WriteLine("float: {0} double: {1} decimal: {2}", flt, dbl, dcm);
ফলাফল :
float: 0.3333333
double: 0.333333333333333
decimal: 0.3333333333333333333333333333
0.1
- আসল বিশ্বে এমন ঘটনা খুব কমই ঘটে! যে কোনও সীমাবদ্ধ স্টোরেজ ফর্ম্যাটটি সীমিত সংখ্যক বিট নিদর্শনগুলিতে অসীম সম্ভাব্য মানগুলিকে মিশ্রিত করবে। উদাহরণস্বরূপ, float
বিবাদ হবে 0.1
এবং 0.1 + 1e-8
, যখন decimal
বিবাদ হবে 0.1
এবং 0.1 + 1e-29
। অবশ্যই, একটি নির্দিষ্ট পরিসরের মধ্যে নির্ভুলতার শূন্য হ্রাস সহ কোনও মানগুলি কোনও ফর্ম্যাটে উপস্থাপন করা যেতে পারে (উদাহরণস্বরূপ float
শূন্যতার শূন্যের সাথে কোনও পূর্ণসংখ্যা 1.6e7 পর্যন্ত সংরক্ষণ করতে পারে) - তবে এটি এখনও অসীম নির্ভুলতা নয়।
0.1
হয় একটি বিশেষ মান নয় ! শুধুমাত্র 10 0.1
টির চেয়ে বেশি "উন্নত" করে তোলে 0.10000001
কারণ মানুষ দশটি বেসের মতো And এমনকি একটি float
মান দিয়েও যদি আপনি 0.1
একইভাবে দুটি মান শুরু করেন তবে সেগুলি উভয়ই একই মান । এটা ঠিক যে যে মান হতে হবে হবে ঠিক 0.1
- এটি হতে হবে নিকটস্থ মান 0.1
যে ঠিক একটি হিসাবে প্রতিনিধিত্ব করা যেতে পারেfloat
। অবশ্যই, বাইনারি ফ্লোট সহ (1.0 / 10) * 10 != 1.0
, তবে দশমিক ভাসমান সহ (1.0 / 3) * 3 != 1.0
either আমরাও হয় পুরোপুরি সুনির্দিষ্ট।
double a = 0.1; double b = 0.1;
তবে a == b
সত্য হবে । এটা ঠিক যে a
এবং b
হবে উভয় ঠিক সমান না 0.1
। সি # তে, যদি আপনি এটি করেন decimal a = 1.0m / 3.0m; decimal b = 1.0m / 3.0m;
তবে a == b
এটিও সত্য। কিন্তু যে ক্ষেত্রে, তন্ন তন্ন এর a
কিংবা b
হবে ঠিক সমান 1/3
- তারা উভয় সমান 0.3333...
। ইন উভয় ক্ষেত্রে, কিছু সঠিকতা উপস্থাপনা কারণে হারিয়ে গেছে। আপনি একগুঁয়েভাবে বলছেন যে decimal
"অসীম" নির্ভুলতা রয়েছে যা মিথ্যা ।
দশমিক কাঠামো নির্ভুলতার জন্য প্রয়োজনীয় আর্থিক গণনার পক্ষে কঠোরভাবে প্রস্তুত, যা বৃত্তাকার তুলনায় তুলনামূলকভাবে অসহিষ্ণু। দশমিকগুলি বৈজ্ঞানিক অ্যাপ্লিকেশনগুলির জন্য পর্যাপ্ত নয় তবে বেশ কয়েকটি কারণে:
+---------+----------------+---------+----------+---------------------------------------------+
| C# | .Net Framework | Signed? | Bytes | Possible Values |
| Type | (System) type | | Occupied | |
+---------+----------------+---------+----------+---------------------------------------------+
| sbyte | System.Sbyte | Yes | 1 | -128 to 127 |
| short | System.Int16 | Yes | 2 | -32768 to 32767 |
| int | System.Int32 | Yes | 4 | -2147483648 to 2147483647 |
| long | System.Int64 | Yes | 8 | -9223372036854775808 to 9223372036854775807 |
| byte | System.Byte | No | 1 | 0 to 255 |
| ushort | System.Uint16 | No | 2 | 0 to 65535 |
| uint | System.UInt32 | No | 4 | 0 to 4294967295 |
| ulong | System.Uint64 | No | 8 | 0 to 18446744073709551615 |
| float | System.Single | Yes | 4 | Approximately ±1.5 x 10-45 to ±3.4 x 1038 |
| | | | | with 7 significant figures |
| double | System.Double | Yes | 8 | Approximately ±5.0 x 10-324 to ±1.7 x 10308 |
| | | | | with 15 or 16 significant figures |
| decimal | System.Decimal | Yes | 12 | Approximately ±1.0 x 10-28 to ±7.9 x 1028 |
| | | | | with 28 or 29 significant figures |
| char | System.Char | N/A | 2 | Any Unicode character (16 bit) |
| bool | System.Boolean | N/A | 1 / 2 | true or false |
+---------+----------------+---------+----------+---------------------------------------------+
আমি ইতিমধ্যে অন্যান্য উত্তর এবং মন্তব্যে জবাব দেওয়া অনেকগুলি ভাল (এবং কিছু খারাপ) তথ্য পুনরায় বলব না, তবে আমি আপনার ফলোআপ প্রশ্নের উত্তরটি একটি টিপ দিয়ে দেব:
কেউ কখন এই একটি ব্যবহার করবে?
গণিত মানগুলির জন্য দশমিক ব্যবহার করুন
পরিমাপ করা মানগুলির জন্য ভাসমান / ডাবল ব্যবহার করুন
কিছু উদাহরণ:
অর্থ (আমরা কি অর্থ গণনা করি বা অর্থ পরিমাপ করি?)
দূরত্ব (আমরা দূরত্ব গণনা করি বা দূরত্ব পরিমাপ করি? *)
স্কোর (আমরা কী স্কোর গণনা করি বা স্কোরগুলি পরিমাপ করি?)
আমরা সর্বদা অর্থ গণনা করি এবং কখনই এটি পরিমাপ করা উচিত নয়। আমরা সাধারণত দূরত্ব পরিমাপ করি। আমরা প্রায়শই স্কোর গণনা করি।
* কিছু ক্ষেত্রে, যাকে আমি নামমাত্র দূরত্ব বলি , আমরা প্রকৃতপক্ষে দূরত্ব গণনা করতে চাই। উদাহরণস্বরূপ, সম্ভবত আমরা দেশের লক্ষণগুলি নিয়ে কাজ করছি যা শহরগুলিতে দূরত্ব দেখায় এবং আমরা জানি যে সেই দূরত্বগুলির মধ্যে কখনই এক দশমিক অঙ্ক (xxx.x কিমি) বেশি হয় না।
float
স্পষ্টতা 7 ডিজিট
double
নির্ভুলতার প্রায় 15 টি সংখ্যা রয়েছে
decimal
নির্ভুলতার প্রায় 28 টি সংখ্যা রয়েছে
আপনার যদি আরও ভাল নির্ভুলতার প্রয়োজন হয় তবে ভাসমানের পরিবর্তে ডাবল ব্যবহার করুন। আধুনিক সিপিইউতে উভয় ডেটা ধরণের প্রায় একই কর্মক্ষমতা থাকে। ভাসা ব্যবহারের একমাত্র বেনিফিট হ'ল তারা কম জায়গা নেয়। ব্যবহারিকভাবে কেবল তখনই গুরুত্বপূর্ণ যখন আপনি সেগুলির অনেকগুলি পেয়েছেন।
আমি এটি আকর্ষণীয় পেয়েছি। প্রতিটি কম্পিউটার বিজ্ঞানী ভাসমান-পয়েন্ট পাটিগণিত সম্পর্কে যা জানা উচিত
double
সেই ক্ষেত্রে (এবং মূলত কেবলমাত্র সেই ক্ষেত্রে) অ্যাকাউন্টিং অ্যাপ্লিকেশনগুলিতে যথাযথ বিবেচনা করব যেখানে 32 বিটের চেয়ে বড় কোন ধরণের ইন্টিজার উপলব্ধ ছিল না, এবং এটি double
ব্যবহার করা হচ্ছিল যেন এটি 53-বিটের পূর্ণসংখ্যার ধরণের (যেমন ধরার জন্য) পুরো সংখ্যার পেনি বা শতভাগের একশতম সংখ্যা) of আজকাল এই জাতীয় জিনিসগুলির জন্য খুব বেশি ব্যবহার হয় না, তবে বহু ভাষা 64৪-বিট (বা কিছু ক্ষেত্রে এমনকি ৩২-বিট!) পূর্ণসংখ্যার গণিত অর্জনের অনেক আগে ডাবল-স্পষ্টতা ভাসমান-পয়েন্ট মান ব্যবহার করার ক্ষমতা অর্জন করে।
Real
আইআইআরসি ইউনিট যথার্থতার সাথে 1.8E + 19 পর্যন্ত মান উপস্থাপন করতে পারে। আমি মনে করি একাউন্টিং অ্যাপ্লিকেশনটির Real
চেয়ে পুরো সংখ্যার পেনি উপস্থাপনের জন্য ব্যবহার করা ...
double
না থাকলেও 9E15 অবধি একক যথার্থতা রয়েছে এমন একটি প্রকারের ভাষার পক্ষে খুব সাধারণ বিষয় ছিল। যদি কোনও ব্যক্তিকে সবচেয়ে বড় উপলব্ধ পূর্ণসংখ্যার ধরণের চেয়ে বড় সংখ্যাগুলি সংরক্ষণ double
করতে হয় তবে মাল্টি-স্পষ্টিকান গণিতকে বিচার করার চেষ্টা করার চেয়ে সহজ এবং দক্ষতার জন্য উপযুক্ত, বিশেষত যখন প্রসেসরের 16x16-> 32 বা সম্পাদন করার নির্দেশ রয়েছে। ..
কেউ তা উল্লেখ করেনি
ডিফল্ট সেটিংসে, ফ্ল্যাটস (সিস্টেম.সিংল) এবং ডাবলস (সিস্টেম.ডুবল) কখনই ওভারফ্লো চেকিং ব্যবহার করবে না যখন ডেসিমাল (সিস্টেম.ডিসিমাল) সর্বদা ওভারফ্লো চেকিং ব্যবহার করবে।
আমি বলতে চাচ্ছি
decimal myNumber = decimal.MaxValue;
myNumber += 1;
ওভারফ্লো এক্সেক্সশন ছুড়ে দেয় ।
তবে এগুলি করে না:
float myNumber = float.MaxValue;
myNumber += 1;
&
double myNumber = double.MaxValue;
myNumber += 1;
float.MaxValue+1 == float.MaxValue
ঠিক যেমন decimal.MaxValue+0.1D == decimal.MaxValue
। সম্ভবত আপনি কিছু বোঝানো হয়েছে float.MaxValue*2
?
System.Decimal
একটি ব্যতিক্রম ঠিক আগে এটি সমগ্র ইউনিট পার্থক্য করতে অক্ষম হয়ে ছোঁড়ার, কিন্তু একটি আবেদন যেমন ডলার এবং সেন্ট, যে খুব দেরি হতে পারে সাথে ডিল করা অনুমিত হয় পারেন।
decimal
শূন্য (CS0020) দ্বারা বিভক্ত করার চেষ্টা করেন তবে সংকলন ব্যর্থ হয় এবং অবিচ্ছেদ্য আক্ষরিক ক্ষেত্রেও এটি একই হয়। তবে যদি রানটাইম দশমিক মান শূন্য দ্বারা ভাগ করা হয় তবে আপনি একটি ব্যতিক্রম সংকলন ত্রুটি পাবেন না।
পূর্ণসংখ্যা, যেমন উল্লেখ করা হয়েছিল, সম্পূর্ণ সংখ্যা। তারা .7, .42, এবং .007 এর মতো পয়েন্টটি কিছু সঞ্চয় করতে পারে না। আপনার যদি এমন সংখ্যা সংরক্ষণ করতে হয় যা পুরো সংখ্যা নয় তবে আপনার বিভিন্ন ধরণের চলক প্রয়োজন। আপনি ডাবল টাইপ বা ফ্লোট টাইপ ব্যবহার করতে পারেন। আপনি এই ধরণের ভেরিয়েবলগুলি ঠিক একইভাবে সেট আপ করেছেন: শব্দটি ব্যবহার না করে int
আপনি টাইপ করুন double
বা float
। এটার মত:
float myFloat;
double myDouble;
( float
"ভাসমান পয়েন্ট" এর জন্য সংক্ষিপ্ত, এবং কেবলমাত্র শেষে একটি পয়েন্ট সহ একটি সংখ্যার অর্থ))
উভয়ের মধ্যে পার্থক্য হল যে সংখ্যাটি তারা ধরে রাখতে পারে তার আকার। জন্য float
, আপনার সংখ্যাতে 7 টি পর্যন্ত সংখ্যা থাকতে পারে। জন্য double
গুলি, আপনি 16 সংখ্যার পর্যন্ত থাকতে পারে। আরও সুনির্দিষ্টভাবে বলতে গেলে, এখানে সরকারী আকার:
float: 1.5 × 10^-45 to 3.4 × 10^38
double: 5.0 × 10^-324 to 1.7 × 10^308
float
এটি একটি 32-বিট সংখ্যা, এবং double
একটি 64-বিট সংখ্যা।
কোডটি পেতে আপনার নতুন বোতামটিতে ডাবল ক্লিক করুন। আপনার বোতাম কোডে নিম্নলিখিত তিনটি লাইন যুক্ত করুন:
double myDouble;
myDouble = 0.007;
MessageBox.Show(myDouble.ToString());
আপনার প্রোগ্রামটি স্থগিত করুন এবং কোডিং উইন্ডোতে ফিরে যান। এই লাইনটি পরিবর্তন করুন:
myDouble = 0.007;
myDouble = 12345678.1234567;
আপনার প্রোগ্রামটি চালান এবং আপনার ডাবল বোতামটি ক্লিক করুন। বার্তা বাক্সটি নম্বরটি সঠিকভাবে প্রদর্শন করে। যদিও শেষে অন্য নম্বর যুক্ত করুন এবং সি # আবার উপরে বা নীচে নেমে আসবে। নৈতিকতাটি হল আপনি যদি নির্ভুলতা চান তবে বৃত্তাকারে সতর্ক থাকুন!
decimal
আসলে দশমিক বিন্যাসে সংরক্ষণ করা হয় (বেস 2 এর বিপরীতে; সুতরাং এটি দুটি সংখ্যার সিস্টেমের মধ্যে রূপান্তরের কারণে হারাতে বা গোল সংখ্যাটি হারাবে না); এছাড়াও, decimal
NaN, -0, ∞, বা -∞ এর মতো বিশেষ মানগুলির কোনও ধারণা নেই ∞
এটি আমার জন্য একটি আকর্ষণীয় থ্রেড হয়ে দাঁড়িয়েছে, আজকের মতো, আমরা decimal
একটি ক এর চেয়ে কম নির্ভুলতা থাকার বিষয়ে একটি বাজে ছোট্ট বাগ পেয়েছি float
।
আমাদের সি # কোডে আমরা একটি এক্সেল স্প্রেডশিট থেকে সংখ্যাসূচক মানগুলি পড়ছি, সেগুলিকে একটিতে রূপান্তরিত করছি decimal
, তারপরে decimal
এটি কোনও এসকিউএল সার্ভার ডাটাবেসে সংরক্ষণের জন্য পরিষেবাতে ফিরে পাঠাচ্ছি ।
Microsoft.Office.Interop.Excel.Range cell = …
object cellValue = cell.Value2;
if (cellValue != null)
{
decimal value = 0;
Decimal.TryParse(cellValue.ToString(), out value);
}
এখন, আমাদের প্রায় সকল এক্সেল মানগুলির জন্য, এটি সুন্দরভাবে কাজ করেছে। তবে কারও কারও কাছে খুব ছোট এক্সেল মানগুলি decimal.TryParse
পুরোপুরি মানটি হারাতে ব্যবহার করে । এরকম একটি উদাহরণ
সেলভ্যালু = 0.00006317592
দশমিক.TryParse (সেলভ্যালু। টুস্ট্রিং (), আউট মূল্য); // 0 ফিরে আসবে
উদ্ভট সমাধানটি ছিল এক্সেল মানগুলিকে double
প্রথম এবং পরে একটিতে রূপান্তর করা decimal
:
Microsoft.Office.Interop.Excel.Range cell = …
object cellValue = cell.Value2;
if (cellValue != null)
{
double valueDouble = 0;
double.TryParse(cellValue.ToString(), out valueDouble);
decimal value = (decimal) valueDouble;
…
}
যদিও এ double
এর চেয়ে কম নির্ভুলতা রয়েছে decimal
, এটি নিশ্চিত করা স্বল্প সংখ্যক এখনও স্বীকৃত হবে। কোনও কারণে, double.TryParse
আসলে এই ধরনের ছোট সংখ্যা পুনরুদ্ধার করতে সক্ষম হয়েছিল, যেখানে decimal.TryParse
এগুলি শূন্যতে সেট করে set
অস্বাভাবিক. খুব অদ্ভুত.
decimal.Parse("0.00006317592")
কাজ করে - আপনার অন্য কিছু চলছে। - সম্ভবত বৈজ্ঞানিক স্বরলিপি?
গেমস এবং এমবেডেড সিস্টেমের মতো অ্যাপ্লিকেশনের জন্য যেখানে মেমরি এবং কর্মক্ষমতা উভয়ই সমালোচনামূলক, ভাসাটি সাধারণত সংখ্যাগত ধরণের পছন্দ কারণ এটি দ্রুত এবং দ্বিগুণের অর্ধেক আকারের হয়। পূর্ণসংখ্যার পছন্দের অস্ত্র হিসাবে ব্যবহৃত হত, তবে ফ্লোটিং পয়েন্টের পারফরম্যান্স আধুনিক প্রসেসরগুলিতে পূর্ণসংখ্যাকে ছাড়িয়ে গেছে। ডেসিমাল ঠিক আছে!
দশমিক, ডাবল এবং ফ্লোট ভেরিয়েবলের ধরণগুলি যেভাবে তারা মানগুলি সঞ্চয় করে different যথার্থতা হ'ল মূল পার্থক্য যেখানে ভাসমানটি একটি একক নির্ভুলতা (32 বিট) ভাসমান পয়েন্ট ডেটা টাইপ, ডাবল হ'ল ডাবল যথার্থতা (bit৪ বিট) ভাসমান পয়েন্ট ডেটা টাইপ এবং দশমিক একটি 128-বিট ভাসমান পয়েন্ট ডেটা টাইপ।
ভাসা - 32 বিট (7 ডিজিট)
ডাবল - 64 বিট (15-16 সংখ্যা)
দশমিক - 128 বিট (28-29 উল্লেখযোগ্য সংখ্যা)
এই সমস্ত ধরণের সমস্যাটি হ'ল একটি নির্দিষ্ট অসম্পূর্ণতা টিকে থাকে এবং নীচের উদাহরণের মতো ছোট দশমিক সংখ্যার সাথেও এই সমস্যাটি দেখা দিতে পারে
Dim fMean as Double = 1.18
Dim fDelta as Double = 0.08
Dim fLimit as Double = 1.1
If fMean - fDelta < fLimit Then
bLower = True
Else
bLower = False
End If
প্রশ্ন: বিলওয়ার ভেরিয়েবলের কোন মান থাকে?
উত্তর: 32 বিট মেশিনে বিলওয়ারে সত্য থাকে !!!
আমি যদি দশমিক দ্বিগুণ দ্বারা প্রতিস্থাপন করি তবে বিলওয়ারের মধ্যে FALSE থাকে যা ভাল উত্তর।
ডাবল, সমস্যাটি হল fMean-fDelta = 1.09999999999 যেটি 1.1 এর চেয়ে কম।
সাবধানতা: আমি মনে করি যে অন্যান্য সংখ্যার জন্যও একই সমস্যা অবশ্যই উপস্থিত থাকতে পারে কারণ দশমিকটি উচ্চতর নির্ভুলতার সাথে কেবল দ্বিগুণ এবং যথার্থতার সর্বদা একটি সীমা থাকে।
আসলে, ডাবল, ফ্লোট এবং দশমিক COBOL এ BINARY দশমিকের সাথে মিল!
এটা দুঃখজনক যে সিওবিএলে প্রয়োগ করা অন্যান্য সংখ্যাসমূহের। নেট নেই et যাঁরা সিওবিওএল জানেন না তাদের ক্ষেত্রে সংখ্যার ধরণের নিম্নলিখিত COBOL এ রয়েছে
BINARY or COMP like float or double or decimal
PACKED-DECIMAL or COMP-3 (2 digit in 1 byte)
ZONED-DECIMAL (1 digit in 1 byte)
সহজ কথায়:
/==========================================================================================
Type Bits Have up to Approximate Range
/==========================================================================================
float 32 7 digits -3.4 × 10 ^ (38) to +3.4 × 10 ^ (38)
double 64 15-16 digits ±5.0 × 10 ^ (-324) to ±1.7 × 10 ^ (308)
decimal 128 28-29 significant digits ±7.9 x 10 ^ (28) or (1 to 10 ^ (28)
/==========================================================================================
আপনি আরো পড়তে পারেন এখানে , ভাসা , ডাবল , এবং ডেসিমাল ।
Decimal
আর্থিক অ্যাপ্লিকেশনের জন্য উপযুক্ত, এবং এটি যখন মধ্যবর্তী সিদ্ধান্ত ব্যবহার করতে প্রধান নির্ণায়ক এর Decimal
এবং Double
। এটি বিরল যে Double
বৈজ্ঞানিক অ্যাপ্লিকেশনগুলির জন্য যথার্থতা যথেষ্ট নয়, উদাহরণস্বরূপ (এবং Decimal
প্রায়শই এর সীমাবদ্ধতার কারণে বৈজ্ঞানিক অ্যাপ্লিকেশনগুলির জন্য অনুপযুক্ত )।
এর প্রত্যেকটির মধ্যে প্রধান পার্থক্য হ'ল যথার্থতা।
float
একটি 32-bit
সংখ্যা, double
একটি 64-bit
সংখ্যা এবং decimal
একটি 128-bit
সংখ্যা।
দশমিক 128 বিট (২৮-২৯ উল্লেখযোগ্য সংখ্যা) আর্থিক প্রয়োগের ক্ষেত্রে দশমিক প্রকারগুলি ব্যবহার করা আরও ভাল কারণ এটি আপনাকে উচ্চ স্তরের যথার্থতা দেয় এবং গোল ত্রুটিগুলি এড়াতে সহজ দেয় যেখানে নির্ভুলতার প্রয়োজন হয় যেখানে অ-পূর্ণসংখ্যার গণিতের জন্য দশমিক ব্যবহার করুন (উদাঃ অর্থ এবং মুদ্রা)
ডাবল 64 বিট (15-16 সংখ্যা) ডাবল প্রকারগুলি হ্যান্ডলিং অর্থ ব্যতীত আসল মানগুলির জন্য সম্ভবত সবচেয়ে বেশি ব্যবহৃত ডেটা টাইপ। অ-পূর্ণসংখ্যার গণিতের জন্য ডাবল ব্যবহার করুন যেখানে সুনির্দিষ্ট উত্তর প্রয়োজন হয় না।
ফ্লোট 32 বিট (7 ডিজিট) এটি বেশিরভাগ গ্রাফিক লাইব্রেরিতে ব্যবহৃত হয় কারণ প্রক্রিয়াকরণ ক্ষমতাগুলির জন্য খুব উচ্চ চাহিদা, এমন পরিস্থিতিতেও ব্যবহৃত হয় যা বৃত্তাকার ত্রুটি সহ্য করতে পারে।
Decimals
একটি তুলনায় অনেক ধীর হয় double/float
।
Decimals
এবং Floats/Doubles
কাস্টিং ছাড়া আর তুলনা করা যায় না যেখানে Floats
ও Doubles
পারে।
Decimals
এনকোডিং বা পিছনে শূন্যগুলিও অনুমতি দিন।
আপনাকে অবশ্যই মানগুলি উল্লেখ করতে হবে:
Decimal dec = 12M/6;
Double dbl = 11D/6;
float fl = 15F/6;
এবং ফলাফলগুলি পরীক্ষা করুন।
Float - 4
Double - 8
Decimal - 12