.NET দশমিক, ভাসমান এবং ডাবল মধ্যে পার্থক্য?


2085

মধ্যে পার্থক্য কি decimal, floatএবং double.NET মধ্যে?

কেউ কখন এই একটি ব্যবহার করবে?


1
আকর্ষণীয় নিবন্ধ zetcode.com/lang/csharp/datatypes
গিব্বোক 14

উত্তর:


2265

floatএবং doubleকরছে ভাসমান বাইনারি বিন্দু ধরনের । অন্য কথায় তারা এ জাতীয় সংখ্যক প্রতিনিধিত্ব করে:

10001.10010110011

বাইনারি নম্বর এবং বাইনারি পয়েন্টের অবস্থান উভয়ই মানের মধ্যে এনকোড করা থাকে।

decimalএক ভাসমান দশমিক পয়েন্ট টাইপ । অন্য কথায় তারা এ জাতীয় সংখ্যক প্রতিনিধিত্ব করে:

12345.65789

আবার, দশমিক পয়েন্টের সংখ্যা এবং অবস্থান উভয়ই মূল্যের মধ্যে এনকোডড থাকে - এটি decimalস্থির বিন্দুর প্রকারের পরিবর্তে এখনও একটি ভাসমান পয়েন্ট টাইপ করে।

লক্ষণীয় গুরুত্বপূর্ণ বিষয় হ'ল মানুষ দশমিক আকারে অ-পূর্ণসংখ্যার প্রতিনিধিত্ব করতে ব্যবহৃত হয় এবং দশমিক প্রতিনিধিত্বের সঠিক ফলাফল আশা করে; সমস্ত দশমিক সংখ্যা বাইনারি ভাসমান বিন্দুতে যথাযথভাবে উপস্থাপনযোগ্য নয় - উদাহরণস্বরূপ, - সুতরাং যদি আপনি একটি বাইনারি ভাসমান বিন্দু মান ব্যবহার করেন তবে আপনি বাস্তবে 0.1 এর কাছাকাছি পাবেন। ভাসমান দশমিক বিন্দুটি ব্যবহার করার সময় আপনি এখনও আনুমানিকতা পাবেন - উদাহরণস্বরূপ, 1 দ্বারা 3 বিভাজনের ফলাফলকে ঠিক উপস্থাপন করা যায় না।

কখন কী ব্যবহার করবেন:

  • "প্রাকৃতিকভাবে সঠিক দশমিক" মানগুলির জন্য এটি ব্যবহার করা ভাল decimal। এটি মানুষের দ্বারা উদ্ভাবিত যে কোনও ধারণার জন্য সাধারণত উপযুক্ত: আর্থিক মূল্যবোধগুলি সর্বাধিক সুস্পষ্ট উদাহরণ, তবে অন্যগুলিও রয়েছে। উদাহরণস্বরূপ, ডুবুরি বা আইস স্কেটারগুলিকে দেওয়া স্কোরটি বিবেচনা করুন।

  • মান যা প্রকৃতির আরো শিল্পকর্ম যা সত্যিই না পরিমাপ করা যায় তাদের জন্য ঠিক যাহাই হউক না কেন, float/ doubleআরো উপযুক্ত হয়। উদাহরণস্বরূপ, বৈজ্ঞানিক তথ্য সাধারণত এই ফর্মটিতে উপস্থাপন করা হবে। এখানে, মূল মানগুলি শুরু করার সাথে "দশমিকভাবে সঠিক" হবে না, সুতরাং প্রত্যাশিত ফলাফলগুলির জন্য "দশমিক নির্ভুলতা" বজায় রাখা গুরুত্বপূর্ণ নয়। দশমিকের তুলনায় ভাসমান বাইনারি পয়েন্টের ধরণের কাজগুলি আরও দ্রুত।


58
float/ doubleসাধারণত সংখ্যার প্রতিনিধিত্ব করবেন না 101.101110, সাধারণত এটি এমন কিছু হিসাবে উপস্থাপিত হয় 1101010 * 2^(01010010)- একটি ঘোষক
মিংগুই স্যামুয়েল

79
@ হ্যাজার্ড: উত্তরের "বাইনারি পয়েন্টের অবস্থান" এর অর্থ এটিই।
জন স্কিটি

112
আমি অবাক হয়েছি এটি ইতিমধ্যে বলা হয়নি, floatএটি একটি সি # ওরফে কীওয়ার্ড এবং। নেট টাইপ নয়। এটি System.Single.. singleএবং doubleবাইনারি পয়েন্ট ধরণের ভাসমান হয়।
ব্রেট ক্যাসওয়েল

54
@ বি কে এসপুরজিওন: ঠিক আছে, কেবল একইভাবে আপনি বলতে পারেন যে সবকিছু একটি বাইনারি ধরণের, সেই সময়ে এটি মোটামুটি অকেজো সংজ্ঞা হয়ে যায়। দশমিক একটি দশমিক প্রকার যা এটি একটি সংখ্যার পূর্ণসংখ্যার তাত্পর্য এবং স্কেল হিসাবে উপস্থাপিত হয়, যেমন ফলাফলটি হ'ল * 10 ^ স্কেল হয়, যেখানে ভাসা এবং ডাবল তাত্পর্যপূর্ণ হয় * 2। স্কেল। আপনি দশমিক দশকে লিখিত একটি সংখ্যা নিয়ে যান এবং দশমিক পয়েন্টটিকে ডানদিকে নিয়ে যান যা আপনার তাত্পর্য এবং স্কেলটি কাজ করার জন্য একটি পূর্ণসংখ্যা পেয়েছে। ভাসা / দ্বৈত জন্য আপনি বাইনারি লিখিত একটি নম্বর দিয়ে শুরু করবেন।
জন স্কিটি

21
আরেকটি পার্থক্য: 32-বিট ভাসা; ডাবল 64 বিট; এবং দশমিক 128-বিট।
ডেভিড

1072

যথার্থতা মূল পার্থক্য।

ভাসা - 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

65
@ দ্য ক্রোকোডিলেহান্টার: দুঃখিত, তবে না দশমিক দশমিক সমস্ত সংখ্যার প্রতিনিধিত্ব করতে পারে যা দশমিক স্বরলিপিতে প্রতিনিধিত্ব করা যেতে পারে তবে উদাহরণস্বরূপ 1/3 নয়। 1.0 মি / 3.0 মি 0,33333333 এ মূল্যায়ন করবে ... শেষে 3 টি এর বৃহত তবে সসীম সংখ্যার সাথে মূল্যায়ন করবে। এটি 3 দ্বারা গুণিত করে সঠিক 1.0 প্রদান করবে না।
এরিক পি।

50
@ দ্য ক্রোকোডিলেহান্টার: আমি মনে করি আপনি নির্ভুলতা এবং নির্ভুলতা বিভ্রান্ত করছেন। তারা এই প্রসঙ্গে বিভিন্ন জিনিস। যথার্থতা হ'ল সংখ্যার প্রতিনিধিত্ব করার জন্য উপলব্ধ সংখ্যাগুলির সংখ্যা। আরও নির্ভুলতা, আপনার গোল করার প্রয়োজন কম। কোনও ডেটা ধরণের অসীম নির্ভুলতা নেই।
ইগবি লার্জম্যান

13
@ দ্য ক্রোকোডিলেহান্টার: আপনি ধরে নিচ্ছেন যে যে মানটি পরিমাপ করা হচ্ছে তা হুবহু 0.1 - আসল বিশ্বে এমন ঘটনা খুব কমই ঘটে! যে কোনও সীমাবদ্ধ স্টোরেজ ফর্ম্যাটটি সীমিত সংখ্যক বিট নিদর্শনগুলিতে অসীম সম্ভাব্য মানগুলিকে মিশ্রিত করবে। উদাহরণস্বরূপ, floatবিবাদ হবে 0.1এবং 0.1 + 1e-8, যখন decimalবিবাদ হবে 0.1এবং 0.1 + 1e-29। অবশ্যই, একটি নির্দিষ্ট পরিসরের মধ্যে নির্ভুলতার শূন্য হ্রাস সহ কোনও মানগুলি কোনও ফর্ম্যাটে উপস্থাপন করা যেতে পারে (উদাহরণস্বরূপ floatশূন্যতার শূন্যের সাথে কোনও পূর্ণসংখ্যা 1.6e7 পর্যন্ত সংরক্ষণ করতে পারে) - তবে এটি এখনও অসীম নির্ভুলতা নয়।
ড্যানিয়েল প্রাইডেন

27
@ দ্য ক্রোকোডিলেহান্টার: আপনি আমার বক্তব্য মিস করেছেন। 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.0either আমরাও হয় পুরোপুরি সুনির্দিষ্ট।
ড্যানিয়েল প্রাইডেন

16
@ দ্য ক্রোকোডিলেহান্টার: আপনি এখনও বুঝতে পারেন না। আমি কীভাবে এটি আরও স্পষ্টভাবে বলতে পারি তা জানি না: সি তে, আপনি যদি তা করেন 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"অসীম" নির্ভুলতা রয়েছে যা মিথ্যা
ড্যানিয়েল প্রাইডেন

84

দশমিক কাঠামো নির্ভুলতার জন্য প্রয়োজনীয় আর্থিক গণনার পক্ষে কঠোরভাবে প্রস্তুত, যা বৃত্তাকার তুলনায় তুলনামূলকভাবে অসহিষ্ণু। দশমিকগুলি বৈজ্ঞানিক অ্যাপ্লিকেশনগুলির জন্য পর্যাপ্ত নয় তবে বেশ কয়েকটি কারণে:

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

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

76
+---------+----------------+---------+----------+---------------------------------------------+
| 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                               |
+---------+----------------+---------+----------+---------------------------------------------+

আরও তথ্যের জন্য এখানে দেখুন


5
আপনি সবচেয়ে বড় পার্থক্যটি রেখে গেছেন, যা দশমিক প্রকারের জন্য ব্যবহৃত বেস (দশমিক বেস 10 হিসাবে সঞ্চিত থাকে, তালিকাভুক্ত অন্যান্য সমস্ত সংখ্যার ধরন বেস 2)।
BrainSlugs83

1
একক এবং ডাবল এর মান সীমা উপরের চিত্র বা উত্স ফোরাম পোস্টে সঠিকভাবে চিত্রিত হয় না। যেহেতু আমরা এখানে সহজেই পাঠ্যটি সুপারস্ক্রিপ্ট করতে পারি না তাই ক্যারেট অক্ষরটি ব্যবহার করুন: এককটি 10 ​​^ -45 এবং 10 ^ 38 হওয়া উচিত এবং ডাবল 10 10 -324 এবং 10 ^ 308 হওয়া উচিত। এছাড়াও, এমএসডিএন -3.4x10 ^ 38 থেকে + 3.4x10 ^ 38 এর পরিসীমা সহ ভাসমান। সিস্টেমের জন্য এমএসডিএন অনুসন্ধান করুন.সিংল এবং সিস্টেম link লিঙ্ক পরিবর্তনের ক্ষেত্রে ডাবল। একক: msdn.microsoft.com/en-us/library/b1e65aza.aspx ডাবল: msdn.microsoft.com/en-us/library/678hzkk9.aspx
deegee

2
দশমিক 128 বিট ... এর অর্থ এটি 12 টি নয় 16 বাইট দখল করে
ব্যবহারকারীর 1477332

51

আমি ইতিমধ্যে অন্যান্য উত্তর এবং মন্তব্যে জবাব দেওয়া অনেকগুলি ভাল (এবং কিছু খারাপ) তথ্য পুনরায় বলব না, তবে আমি আপনার ফলোআপ প্রশ্নের উত্তরটি একটি টিপ দিয়ে দেব:

কেউ কখন এই একটি ব্যবহার করবে?

গণিত মানগুলির জন্য দশমিক ব্যবহার করুন

পরিমাপ করা মানগুলির জন্য ভাসমান / ডাবল ব্যবহার করুন

কিছু উদাহরণ:

  • অর্থ (আমরা কি অর্থ গণনা করি বা অর্থ পরিমাপ করি?)

  • দূরত্ব (আমরা দূরত্ব গণনা করি বা দূরত্ব পরিমাপ করি? *)

  • স্কোর (আমরা কী স্কোর গণনা করি বা স্কোরগুলি পরিমাপ করি?)

আমরা সর্বদা অর্থ গণনা করি এবং কখনই এটি পরিমাপ করা উচিত নয়। আমরা সাধারণত দূরত্ব পরিমাপ করি। আমরা প্রায়শই স্কোর গণনা করি।

* কিছু ক্ষেত্রে, যাকে আমি নামমাত্র দূরত্ব বলি , আমরা প্রকৃতপক্ষে দূরত্ব গণনা করতে চাই। উদাহরণস্বরূপ, সম্ভবত আমরা দেশের লক্ষণগুলি নিয়ে কাজ করছি যা শহরগুলিতে দূরত্ব দেখায় এবং আমরা জানি যে সেই দূরত্বগুলির মধ্যে কখনই এক দশমিক অঙ্ক (xxx.x কিমি) বেশি হয় না।


1
আমি এই উত্তরটি সত্যিই পছন্দ করি, বিশেষত "" আমরা কী অর্থ গণনা করি বা পরিমাপ করি? " যাইহোক, অর্থ ব্যতীত, আমি "গণনা করা" এমন কোনও বিষয় যা ভাবতে পারি না এটি কেবল পূর্ণসংখ্য নয়। আমি কিছু অ্যাপ্লিকেশন দেখেছি যেগুলি ডেসিমাল ব্যবহার করে কেবল কারণ ডাবলটির খুব কম উল্লেখযোগ্য সংখ্যা থাকে। অন্য কথায়, দশমিকটি ব্যবহৃত হতে পারে কারণ সি # তে চতুর্ভুজ টাইপ নয় en.wikedia.org/wiki/Quadruple- প্রিসিশন_ফ্লোটিং- পয়েন্ট
জন হেন্কেল

48

float স্পষ্টতা 7 ডিজিট

double নির্ভুলতার প্রায় 15 টি সংখ্যা রয়েছে

decimal নির্ভুলতার প্রায় 28 টি সংখ্যা রয়েছে

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

আমি এটি আকর্ষণীয় পেয়েছি। প্রতিটি কম্পিউটার বিজ্ঞানী ভাসমান-পয়েন্ট পাটিগণিত সম্পর্কে যা জানা উচিত


1
@ রজারলিপস কম্বে: আমি doubleসেই ক্ষেত্রে (এবং মূলত কেবলমাত্র সেই ক্ষেত্রে) অ্যাকাউন্টিং অ্যাপ্লিকেশনগুলিতে যথাযথ বিবেচনা করব যেখানে 32 বিটের চেয়ে বড় কোন ধরণের ইন্টিজার উপলব্ধ ছিল না, এবং এটি doubleব্যবহার করা হচ্ছিল যেন এটি 53-বিটের পূর্ণসংখ্যার ধরণের (যেমন ধরার জন্য) পুরো সংখ্যার পেনি বা শতভাগের একশতম সংখ্যা) of আজকাল এই জাতীয় জিনিসগুলির জন্য খুব বেশি ব্যবহার হয় না, তবে বহু ভাষা 64৪-বিট (বা কিছু ক্ষেত্রে এমনকি ৩২-বিট!) পূর্ণসংখ্যার গণিত অর্জনের অনেক আগে ডাবল-স্পষ্টতা ভাসমান-পয়েন্ট মান ব্যবহার করার ক্ষমতা অর্জন করে।
সুপারক্যাট

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

6
অ্যাকাউন্টিং অ্যাপ্লিকেশনগুলিতে @ সুপের্যাট ডাবল কখনই উপযুক্ত নয় । কারণ ডাবল কেবলমাত্র দশমিক মান (এমনকি তার নিজস্ব নির্ভুলতার পরিসীমা মধ্যে থাকা) করতে পারে। কারণ ডাবলটি বেস -২ (বাইনারি)-কেন্দ্রিক ফর্ম্যাটে মানগুলি সঞ্চয় করে।
BrainSlugs83

2
@ ব্রেইনস্লাগস ৩৩: পুরো-অ-সংখ্যা নির্ধারণের জন্য ভাসমান-পয়েন্টের ধরণের ব্যবহার অনুচিত হবে, তবে ভাষাগুলির পক্ষে ভাসমান-পয়েন্ট প্রকারের জন্য এটি খুব সাধারণ ছিল যা তাদের পূর্ণসংখ্যার ধরণের চেয়ে বড় পুরো সংখ্যা মানগুলিকে প্রতিনিধিত্ব করতে পারে prec । সম্ভবত এর সবচেয়ে চূড়ান্ত উদাহরণ টার্বো-87 was যাঁর একমাত্র পূর্ণসংখ্যার ধরণগুলি -32768 থেকে +32767 এর মধ্যে সীমাবদ্ধ ছিল, তবে যার Realআইআইআরসি ইউনিট যথার্থতার সাথে 1.8E + 19 পর্যন্ত মান উপস্থাপন করতে পারে। আমি মনে করি একাউন্টিং অ্যাপ্লিকেশনটির Realচেয়ে পুরো সংখ্যার পেনি উপস্থাপনের জন্য ব্যবহার করা ...
সুপারক্যাট

1
... এটি 16-বিট মানগুলির একটি গুচ্ছ ব্যবহার করে বহু-নির্ভুল গণিত সম্পাদনের চেষ্টা করার জন্য। বেশিরভাগ অন্যান্য ভাষার ক্ষেত্রে পার্থক্যটি চূড়ান্ত ছিল না, তবে দীর্ঘকাল ধরে ভাষার পক্ষে 4E9 এর চেয়ে বেশি পূর্ণসংখ্যার টাইপ doubleনা থাকলেও 9E15 অবধি একক যথার্থতা রয়েছে এমন একটি প্রকারের ভাষার পক্ষে খুব সাধারণ বিষয় ছিল। যদি কোনও ব্যক্তিকে সবচেয়ে বড় উপলব্ধ পূর্ণসংখ্যার ধরণের চেয়ে বড় সংখ্যাগুলি সংরক্ষণ doubleকরতে হয় তবে মাল্টি-স্পষ্টিকান গণিতকে বিচার করার চেষ্টা করার চেয়ে সহজ এবং দক্ষতার জন্য উপযুক্ত, বিশেষত যখন প্রসেসরের 16x16-> 32 বা সম্পাদন করার নির্দেশ রয়েছে। ..
সুপারক্যাট

36

কেউ তা উল্লেখ করেনি

ডিফল্ট সেটিংসে, ফ্ল্যাটস (সিস্টেম.সিংল) এবং ডাবলস (সিস্টেম.ডুবল) কখনই ওভারফ্লো চেকিং ব্যবহার করবে না যখন ডেসিমাল (সিস্টেম.ডিসিমাল) সর্বদা ওভারফ্লো চেকিং ব্যবহার করবে।

আমি বলতে চাচ্ছি

decimal myNumber = decimal.MaxValue;
myNumber += 1;

ওভারফ্লো এক্সেক্সশন ছুড়ে দেয় ।

তবে এগুলি করে না:

float myNumber = float.MaxValue;
myNumber += 1;

&

double myNumber = double.MaxValue;
myNumber += 1;

1
float.MaxValue+1 == float.MaxValueঠিক যেমন decimal.MaxValue+0.1D == decimal.MaxValue। সম্ভবত আপনি কিছু বোঝানো হয়েছে float.MaxValue*2?
সুপারক্যাট

@ সুপারকার তবে এটি দশমিকের তুলনায় সত্য নয় M ম্যাক্সভ্যালু + ১ == দশমিক
M

@ সুপারকার দশমিক M ম্যাক্সভ্যালু + 0.1 মি == দশমিক M ম্যাক্সভ্যালু ঠিক আছে
গর্কেমহালুলু

1
System.Decimalএকটি ব্যতিক্রম ঠিক আগে এটি সমগ্র ইউনিট পার্থক্য করতে অক্ষম হয়ে ছোঁড়ার, কিন্তু একটি আবেদন যেমন ডলার এবং সেন্ট, যে খুব দেরি হতে পারে সাথে ডিল করা অনুমিত হয় পারেন।
সুপারক্যাট

28
  1. সংকলন এবং রান সময় উভয় ব্যতীত ডাবল এবং ফ্লোট পূর্ণসংখ্যা শূন্য দ্বারা ভাগ করা যায়।
  2. দশমিককে পূর্ণসংখ্যা শূন্য দ্বারা ভাগ করা যায় না। সংকলন সর্বদা ব্যর্থ হবে যদি আপনি এটি করেন।

6
তারা নিশ্চিত করতে পারে! এগুলির মধ্যে কয়েকটি "যাদু" মান রয়েছে যেমন অনন্ত, নেতিবাচক ইনফিনিটি, এবং NaN (একটি সংখ্যা নয়) যা opালুগুলি গণনা করার সময় উল্লম্ব রেখা সনাক্তকরণের জন্য এটি খুব দরকারী করে তোলে ... আরও, যদি আপনাকে ফ্লোট কল করার মধ্যে সিদ্ধান্ত নিতে হয় .TryParse, Double.TryParse, এবং দশমিক। ট্রাই পার্স (উদাহরণস্বরূপ, একটি স্ট্রিং একটি সংখ্যা কিনা তা সনাক্ত করতে), আমি ডাবল বা ফ্লোট ব্যবহার করার পরামর্শ দিচ্ছি, কারণ তারা "ইনফিনিটি", "-ইফিনিটি" এবং "NaN" সঠিকভাবে পার্স করবে দশমিক হবে না, যেখানে।
BrainSlugs83

আপনি যদি আক্ষরিক decimalশূন্য (CS0020) দ্বারা বিভক্ত করার চেষ্টা করেন তবে সংকলন ব্যর্থ হয় এবং অবিচ্ছেদ্য আক্ষরিক ক্ষেত্রেও এটি একই হয়। তবে যদি রানটাইম দশমিক মান শূন্য দ্বারা ভাগ করা হয় তবে আপনি একটি ব্যতিক্রম সংকলন ত্রুটি পাবেন না।
ড্র নোকস

@ BrainSlugs83 তবে আপনি প্রসঙ্গের উপর নির্ভর করে "ইনফিনিটি" বা "NaN" পার্স করতে চান না want বিকাশকারী যথেষ্ট পরিমাণে কঠোর না হলে ব্যবহারকারী ইনপুটটির জন্য একটি ভাল শোষণের মতো বলে মনে হচ্ছে।
শীতকাল

28

পূর্ণসংখ্যা, যেমন উল্লেখ করা হয়েছিল, সম্পূর্ণ সংখ্যা। তারা .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;

আপনার প্রোগ্রামটি চালান এবং আপনার ডাবল বোতামটি ক্লিক করুন। বার্তা বাক্সটি নম্বরটি সঠিকভাবে প্রদর্শন করে। যদিও শেষে অন্য নম্বর যুক্ত করুন এবং সি # আবার উপরে বা নীচে নেমে আসবে। নৈতিকতাটি হল আপনি যদি নির্ভুলতা চান তবে বৃত্তাকারে সতর্ক থাকুন!


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

16
  • ভাসা: ± 1.5 x 10 ^ -45 থেকে ± 3.4 x 10 ^ 38 (significant 7 উল্লেখযোগ্য পরিসংখ্যান
  • ডাবল: .0 5.0 x 10 ^ -324 থেকে ± 1.7 x 10 ^ 308 (15-16 উল্লেখযোগ্য চিত্র)
  • দশমিক: ± 1.0 x 10 ^ -28 থেকে ± 7.9 x 10 ^ 28 (28-29 উল্লেখযোগ্য চিত্র)

9
পার্থক্যটি কেবল নির্ভুলতার চেয়ে বেশি। - decimalআসলে দশমিক বিন্যাসে সংরক্ষণ করা হয় (বেস 2 এর বিপরীতে; সুতরাং এটি দুটি সংখ্যার সিস্টেমের মধ্যে রূপান্তরের কারণে হারাতে বা গোল সংখ্যাটি হারাবে না); এছাড়াও, decimalNaN, -0, ∞, বা -∞ এর মতো বিশেষ মানগুলির কোনও ধারণা নেই ∞
BrainSlugs83

13

এটি আমার জন্য একটি আকর্ষণীয় থ্রেড হয়ে দাঁড়িয়েছে, আজকের মতো, আমরা 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

অস্বাভাবিক. খুব অদ্ভুত.


3
কৌতূহলের বাইরে সেলভ্যালু.টোস্ট্রিং () এর কাঁচা মূল্য কী ছিল? দশমিক.ট্রিপার্স ("0.00006317592", আউট ভাল) কাজ করছে বলে মনে হচ্ছে ...
মাইকালান

11
-1 আমাকে ভুল করবেন না, যদি সত্য হয় তবে এটি খুব আকর্ষণীয় তবে এটি একটি পৃথক প্রশ্ন, এটি অবশ্যই এই প্রশ্নের উত্তর নয়।
ওয়েস্টন

2
সম্ভবত কারণ এক্সেল সেলটি একটি ডাবল ফিরিয়েছিল এবং টোস্ট্রিংয়ের (") মান ছিল" 6.31759E-05 "সুতরাং দশমিক। পার্স () স্বরলিপিটি পছন্দ করেন নি। আমি যদি আপনি দশমিকের রিটার্ন মানটি পরীক্ষা করে থাকেন তবে আমি বাজি ধরছি ry ট্রাইপার্স () এটি মিথ্যা হত।
সার্জিওল

2
@ ওয়েস্টন উত্তরগুলি প্রায়শই উত্তরগুলি মিস করে যে সংখ্যাসমূহ পূরণ করে তা পূরণ করে। এই উত্তরটি পার্সিংয়ের ক্ষেত্রে একটি পার্থক্য তুলে ধরে। এটি প্রশ্নের উত্তর খুব বেশি!
রবিনো

1
এর ... decimal.Parse("0.00006317592")কাজ করে - আপনার অন্য কিছু চলছে। - সম্ভবত বৈজ্ঞানিক স্বরলিপি?
BrainSlugs83

8

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


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

ডাবলগুলিও ফ্লোটের আকারের দ্বিগুণ, যার অর্থ আপনার দ্বিগুণ ডেটা দিয়ে চিবানো দরকার, যা আপনার ক্যাশে পারফরম্যান্সকে আঘাত করে। সর্বদা হিসাবে, পরিমাপ এবং তদনুসারে এগিয়ে যান।
yoyo

6

দশমিক, ডাবল এবং ফ্লোট ভেরিয়েবলের ধরণগুলি যেভাবে তারা মানগুলি সঞ্চয় করে different যথার্থতা হ'ল মূল পার্থক্য যেখানে ভাসমানটি একটি একক নির্ভুলতা (32 বিট) ভাসমান পয়েন্ট ডেটা টাইপ, ডাবল হ'ল ডাবল যথার্থতা (bit৪ বিট) ভাসমান পয়েন্ট ডেটা টাইপ এবং দশমিক একটি 128-বিট ভাসমান পয়েন্ট ডেটা টাইপ।

ভাসা - 32 বিট (7 ডিজিট)

ডাবল - 64 বিট (15-16 সংখ্যা)

দশমিক - 128 বিট (28-29 উল্লেখযোগ্য সংখ্যা)

দশমিক, ভাসমান এবং ডাবল এর মধ্যে পার্থক্য More


5

এই সমস্ত ধরণের সমস্যাটি হ'ল একটি নির্দিষ্ট অসম্পূর্ণতা টিকে থাকে এবং নীচের উদাহরণের মতো ছোট দশমিক সংখ্যার সাথেও এই সমস্যাটি দেখা দিতে পারে

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) 

4

সহজ কথায়:

  1. দশমিক, ডাবল এবং ফ্লোট ভেরিয়েবলের ধরণগুলি যেভাবে তারা মানগুলি সঞ্চয় করে different
  2. যথার্থ হয় মূল পার্থক্য (লক্ষ করুন যে, এই একক পার্থক্য নয়) যেখানে ভাসা একটি একক স্পষ্টতা (32 বিট) ফ্লোটিং পয়েন্ট ডাটা টাইপ করা হয়, ডবল ডাবল স্পষ্টতা হয় (64 বিট) ফ্লোটিং পয়েন্ট ডাটা টাইপ এবং দশমিক একটি 128-বিট হয় ভাসমান পয়েন্ট ডাটা টাইপ।
  3. সংক্ষিপ্ত তালিকা:

/==========================================================================================
    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)
/==========================================================================================
আপনি আরো পড়তে পারেন এখানে , ভাসা , ডাবল , এবং ডেসিমাল


এই উত্তরটি কী যুক্ত করে যা ইতিমধ্যে বিদ্যমান উত্তরের আওতায় নেই? বিটিডাব্লু, আপনার "বা" "দশমিক" লাইনে ভুল: ওয়েব পৃষ্ঠায় যে স্ল্যাশ আপনি অনুলিপি করছেন সেটি বিকল্পের পরিবর্তে বিভাগকে নির্দেশ করে।
মার্ক ডিকিনসন

1
এবং আমি দৃ strongly়ভাবে বিতর্ক করব যে নির্ভুলতা প্রধান পার্থক্য। মূল পার্থক্য হ'ল: দশমিক ভাসমান-পয়েন্ট বনাম বাইনারি ভাসমান-পয়েন্ট। যে পার্থক্য কি করে তোলে Decimalআর্থিক অ্যাপ্লিকেশনের জন্য উপযুক্ত, এবং এটি যখন মধ্যবর্তী সিদ্ধান্ত ব্যবহার করতে প্রধান নির্ণায়ক এর Decimalএবং Double। এটি বিরল যে Doubleবৈজ্ঞানিক অ্যাপ্লিকেশনগুলির জন্য যথার্থতা যথেষ্ট নয়, উদাহরণস্বরূপ (এবং Decimalপ্রায়শই এর সীমাবদ্ধতার কারণে বৈজ্ঞানিক অ্যাপ্লিকেশনগুলির জন্য অনুপযুক্ত )।
মার্ক ডিকিনসন

2

এর প্রত্যেকটির মধ্যে প্রধান পার্থক্য হ'ল যথার্থতা।

floatএকটি 32-bitসংখ্যা, doubleএকটি 64-bitসংখ্যা এবং decimalএকটি 128-bitসংখ্যা।


0
  • দশমিক 128 বিট (২৮-২৯ উল্লেখযোগ্য সংখ্যা) আর্থিক প্রয়োগের ক্ষেত্রে দশমিক প্রকারগুলি ব্যবহার করা আরও ভাল কারণ এটি আপনাকে উচ্চ স্তরের যথার্থতা দেয় এবং গোল ত্রুটিগুলি এড়াতে সহজ দেয় যেখানে নির্ভুলতার প্রয়োজন হয় যেখানে অ-পূর্ণসংখ্যার গণিতের জন্য দশমিক ব্যবহার করুন (উদাঃ অর্থ এবং মুদ্রা)

  • ডাবল 64 বিট (15-16 সংখ্যা) ডাবল প্রকারগুলি হ্যান্ডলিং অর্থ ব্যতীত আসল মানগুলির জন্য সম্ভবত সবচেয়ে বেশি ব্যবহৃত ডেটা টাইপ। অ-পূর্ণসংখ্যার গণিতের জন্য ডাবল ব্যবহার করুন যেখানে সুনির্দিষ্ট উত্তর প্রয়োজন হয় না।

  • ফ্লোট 32 বিট (7 ডিজিট) এটি বেশিরভাগ গ্রাফিক লাইব্রেরিতে ব্যবহৃত হয় কারণ প্রক্রিয়াকরণ ক্ষমতাগুলির জন্য খুব উচ্চ চাহিদা, এমন পরিস্থিতিতেও ব্যবহৃত হয় যা বৃত্তাকার ত্রুটি সহ্য করতে পারে।

Decimalsএকটি তুলনায় অনেক ধীর হয় double/float

Decimalsএবং Floats/Doublesকাস্টিং ছাড়া আর তুলনা করা যায় না যেখানে FloatsDoublesপারে।

Decimals এনকোডিং বা পিছনে শূন্যগুলিও অনুমতি দিন।


-1

ডেসিমাল, ফ্লোট এবং ডাবল ইন। নেট (সি #) সংজ্ঞায়িত করতে

আপনাকে অবশ্যই মানগুলি উল্লেখ করতে হবে:

Decimal dec = 12M/6;
Double dbl = 11D/6;
float fl = 15F/6;

এবং ফলাফলগুলি পরীক্ষা করুন।

এবং প্রতিটি দ্বারা বাইটস দখল করা হয়

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