ভাসমান পয়েন্ট সংখ্যাগুলি কেন সঠিক নয়?


198

ভাসমান পয়েন্ট সংখ্যা হিসাবে সংরক্ষণ করা হলে কেন কিছু নম্বর নির্ভুলতা হারাবে?

উদাহরণস্বরূপ, দশমিক সংখ্যাটি 9.2হ'ল দুটি দশমিক পূর্ণসংখ্যার ( 92/10) এর অনুপাত হিসাবে প্রকাশ করা যেতে পারে , উভয়ই বাইনারি ( 0b1011100/0b1010) এ ঠিক প্রকাশ করা যেতে পারে । যাইহোক, ভাসমান পয়েন্ট সংখ্যা হিসাবে সঞ্চিত একই অনুপাত কখনই ঠিক এর সমান হয় না 9.2:

32-bit "single precision" float: 9.19999980926513671875
64-bit "double precision" float: 9.199999999999999289457264239899814128875732421875

এই জাতীয় আপাতদৃষ্টিতে সরল সংখ্যাটি "খুব বড়" মেমরির 64 বিটগুলিতে প্রকাশ করতে পারে ?




উত্তর:


241

বেশিরভাগ প্রোগ্রামিং ভাষায়, ভাসমান পয়েন্ট সংখ্যাগুলি বৈজ্ঞানিক স্বরলিপির মতো অনেকগুলি প্রতিনিধিত্ব করা হয় : একটি ক্ষতিকারক এবং একটি ম্যান্টিসার সাথে (এটি হিস্ট্যান্টও বলা হয়)। একটি খুব সাধারণ সংখ্যা, বলুন 9.2, আসলে এই ভগ্নাংশ:

5179139571476070 * 2 -49

যেখানে -49খুনি এবং ম্যান্টিসা 5179139571476070কিছু দশমিক সংখ্যাকে এভাবে উপস্থাপন করা অসম্ভব হওয়ার কারণটি হ'ল घाताবাচক এবং ম্যান্টিসার উভয়ই পূর্ণসংখ্যার হতে হবে। অন্য কথায়, সমস্ত ভাসমানগুলি অবশ্যই 2 এর পূর্ণসংখ্যার শক্তি দ্বারা গুণিত একটি পূর্ণসংখ্যা হতে হবে ।

9.2সহজভাবে হতে পারে 92/10তবে 10 টি 2 এন হিসাবে প্রকাশ করা যায় না যদি এন পূর্ণসংখ্যার মানগুলিতে সীমাবদ্ধ থাকে।


ডেটা দেখছি

প্রথমত, 32- এবং 64-বিট তৈরির উপাদানগুলি দেখতে কয়েকটি ফাংশন float। আপনি যদি কেবলমাত্র আউটপুটটি (পাইথনের উদাহরণ) সম্পর্কে যত্নশীল হন তবে এগুলি সম্পর্কে গ্লস করুন:

def float_to_bin_parts(number, bits=64):
    if bits == 32:          # single precision
        int_pack      = 'I'
        float_pack    = 'f'
        exponent_bits = 8
        mantissa_bits = 23
        exponent_bias = 127
    elif bits == 64:        # double precision. all python floats are this
        int_pack      = 'Q'
        float_pack    = 'd'
        exponent_bits = 11
        mantissa_bits = 52
        exponent_bias = 1023
    else:
        raise ValueError, 'bits argument must be 32 or 64'
    bin_iter = iter(bin(struct.unpack(int_pack, struct.pack(float_pack, number))[0])[2:].rjust(bits, '0'))
    return [''.join(islice(bin_iter, x)) for x in (1, exponent_bits, mantissa_bits)]

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

পাইথন floatএকটি 64-বিট, ডাবল-স্পষ্টতা নম্বর prec সি, সি ++, জাভা এবং সি # এর মতো অন্যান্য ভাষায় ডাবল-স্পষ্টকরণের একটি পৃথক প্রকার রয়েছে double, যা প্রায়শই 64৪ বিট হিসাবে প্রয়োগ করা হয়।

আমরা যখন আমাদের উদাহরণ সহ সেই ফাংশনটি কল করি, তখন আমরা 9.2যা পাই তা এখানে:

>>> float_to_bin_parts(9.2)
['0', '10000000010', '0010011001100110011001100110011001100110011001100110']

ডেটা ব্যাখ্যার

আপনি দেখতে পাবেন যে আমি রিটার্ন মানটি তিনটি ভাগে বিভক্ত করেছি। এই উপাদানগুলি হ'ল:

  • চিহ্ন
  • সূচক
  • ম্যান্টিসা (সিগনিফিক্যান্ড বা ভগ্নাংশও বলা হয়)

চিহ্ন

সাইনটি প্রথম উপাদানটিতে একক বিট হিসাবে সংরক্ষণ করা হয়। এটি ব্যাখ্যা করা সহজ: এর 0অর্থ ফ্লোটটি একটি ধনাত্মক সংখ্যা; 1এর অর্থ এটি নেতিবাচক। কারণ 9.2ইতিবাচক, আমাদের সাইন মান 0

সূচক

এক্সপোনেন্টটি 11 বিট হিসাবে মাঝের উপাদানগুলিতে সংরক্ষণ করা হয়। আমাদের ক্ষেত্রে 0b10000000010,। দশমিক, এটি মান উপস্থাপন করে 1026। এই উপাদানটি একটি ছল যে আপনি একটি সংখ্যার সমান বিয়োগ হবে 2 1 - (বিট #) - 1 সত্য এক্সপোনেন্ট পেতে; আমাদের ক্ষেত্রে, এর অর্থ প্রকৃত ব্যয়কারী (দশমিক সংখ্যা 3) পেতে 0b1111111111(দশমিক সংখ্যা 1023) বিয়োগ করা 0b00000000011

অংশক

ম্যান্টিসা তৃতীয় উপাদানটিতে 52 বিট হিসাবে সংরক্ষণ করা হয়। যাইহোক, এই উপাদানটির পাশাপাশি একটি গৌরব রয়েছে। এই ছদ্মবেশ বুঝতে, বৈজ্ঞানিক স্বরলিপি একটি নম্বর বিবেচনা করুন:

6.0221413x10 23

ম্যান্টিসা হবে 6.0221413। মনে রাখবেন যে বৈজ্ঞানিক স্বরলিপিতে ম্যান্টিসার সর্বদা একক অ শূন্য অঙ্কের সাথে শুরু হয়। বাইনারিটির ক্ষেত্রে একই দুটি ক্ষেত্রেই কেবল দুটি সংখ্যা রয়েছে: 0এবং 1। তাই বাইনারি ম্যান্টিসা সবসময়ই শুরু হয় 1! যখন একটি ফ্লোট সংরক্ষণ করা হয়, 1বাইনারি ম্যান্টিসার সামনের অংশটি স্থান বাঁচাতে বাদ দেওয়া হয়; আসল মান্টিসা পেতে আমাদের এটি আমাদের তৃতীয় উপাদানটির সামনে রেখে দিতে হবে :

1,0010011001100110011001100110011001100110011001100110

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

দশমিক সংখ্যার সাথে কাজ করার সময়, আমরা দশমিক দশকের গুণমান বা বিভাজন দ্বারা "দশমিক বিন্দু স্থানান্তরিত করি" বাইনারি ভাষায়, আমরা ২ এর পাওয়ার দ্বারা বিভাজন বা ভাগ করে একই জিনিসটি করতে পারি, যেহেতু আমাদের তৃতীয় উপাদানটিতে 52 বিট রয়েছে, তাই আমরা বিভক্ত হয়েছি এটি 2 52 দ্বারা এটি 52 টি স্থান ডানদিকে নিয়ে যেতে:

0,0010011001100110011001100110011001100110011001100110

দশমিক স্বীকৃতিতে, এটি পাওয়ার জন্য ভাগ 675539944105574করে নেওয়া সমান । (এটি একটি অনুপাতের একটি উদাহরণ যা বাইনারিতে ঠিক প্রকাশ করা যেতে পারে তবে প্রায় দশমিক দশমিক; আরও বিশদ জন্য দেখুন: 675539944105574/4503599627370496 ।)45035996273704960.1499999999999999

এখন যে আমরা তৃতীয় উপাদানটিকে একটি ভগ্নাংশের সংখ্যায় রূপান্তর করেছি, যুক্ত 1করে সত্যিকারের মান্টিসা দিয়েছি।

উপাদানগুলি পুনরায় প্রয়োগ করা হচ্ছে

  • সাইন (প্রথম উপাদান): 0ধনাত্মক 1জন্য, নেতিবাচক জন্য
  • খাঁটি (মাঝের উপাদান): আসল ব্যয়কারী পেতে 2 (বিটের # টি) - 1 - 1 বিয়োগ করুন
  • মান্টিসা (শেষ উপাদান): 2 (# বিটের # ) দিয়ে ভাগ করুন 1এবং সত্যিকারের মান্টিসা যোগ করুন

সংখ্যা গণনা করা হচ্ছে

তিনটি অংশ একসাথে রেখে, আমাদের এই বাইনারি নম্বর দেওয়া হয়েছে:

1.0010011001100110011001100110011001100110011001100110 এক্স 10 11

যা আমরা তখন বাইনারি থেকে দশকে রূপান্তর করতে পারি:

1.1499999999999999 x 2 3 (নিখুঁত!)

9.2ভাসমান পয়েন্টের মান হিসাবে সংরক্ষণের পরে আমরা ( ) দিয়ে শুরু করা সংখ্যার চূড়ান্ত উপস্থাপনাটি প্রকাশ করার জন্য গুণিত করুন :

9,1999999999999993


ভগ্নাংশ হিসাবে উপস্থাপন করা

9.2

এখন আমরা সংখ্যাটি তৈরি করেছি, এটি একটি সাধারণ ভগ্নাংশে পুনর্গঠন করা সম্ভব:

1.0010011001100110011001100110011001100110011001100110 এক্স 10 11

পুরো সংখ্যায় মান্টিসা স্থানান্তর করুন:

10010011001100110011001100110011001100110011001100110 এক্স 10 11-110100

দশমিক রূপান্তর করুন:

5179139571476070 x 2 3-52

ব্যয়কারীকে বিয়োগ করুন:

5179139571476070 x 2 -49

নেতিবাচক অভিজাতকে বিভাগে পরিণত করুন:

5179139571476070/2 49

ঘনক্ষেত্র:

5179139571476070/562949953421312

যা সমান:

9,1999999999999993

9.5

>>> float_to_bin_parts(9.5)
['0', '10000000010', '0011000000000000000000000000000000000000000000000000']

ইতিমধ্যে আপনি দেখতে পারেন ম্যান্টিসাটি কেবলমাত্র 4 টি অঙ্কের পরে পুরো শূন্যের পরে। তবে চলুন গতিবেগের মধ্য দিয়ে through

বাইনারি বৈজ্ঞানিক স্বরলিপি জমা দিন:

1.0011 x 10 11

দশমিক বিন্দু স্থানান্তর:

10011 x 10 11-100

ব্যয়কারীকে বিয়োগ করুন:

10011 x 10 -1

বাইনারি থেকে দশমিক:

19 এক্স 2 -1

বিভাগে নেতিবাচক ঘাতক:

19/2 1

ঘনক্ষেত্র:

19/2

সমান:

9.5



আরও পড়া


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

1
আপনি পাইথন এবং ভাসমান দফা বিষয়ে কথা বলছি তবে আমি আপনার লিঙ্কগুলির মধ্যে পাইথন টিউটোরিয়াল সহ অন্তত করার সুপারিশ করছি: docs.python.org/3.4/tutorial/floatingpoint.html এর ওয়ান স্টপ যান থেকে হতে অনুমিত যে পাইথন প্রোগ্রামারদের জন্য ভাসমান-পয়েন্ট ইস্যুগুলির জন্য উত্স যদি এটি কোনও উপায়ে না থাকে (এবং এটি প্রায় নিশ্চিতভাবেই হয়) তবে আপডেট বা পরিবর্তনের জন্য দয়া করে পাইথন বাগ ট্র্যাকারে কোনও সমস্যা খুলুন।
মার্ক ডিকিনসন

@ মিলেস্টার যদি এটি সম্প্রদায় উইকিতে পরিণত হয়, তবে আমার উত্তরটি আপনার মধ্যে অন্তর্ভুক্ত করতে নির্দ্বিধায় অনুভব করুন।
নিকু স্টুর্কা

5
এই উত্তরটি অবশ্যই অবশ্যই ভাসমান-পয়েন্ট- gui.de এর সাথে লিঙ্ক করা উচিত , কারণ এটি সম্ভবত প্রাথমিকের জন্য সেরা ভূমিকা introduction আইএমও, এটি "প্রতিটি কম্পিউটার বিজ্ঞানীর কী জানা উচিত ..." এর উপরেও হওয়া উচিত - আজকাল, যে সমস্ত ব্যক্তিরা গোল্ডবার্গের কাগজগুলি যথাযথভাবে বুঝতে পারে তারা ইতিমধ্যে এটি সম্পর্কে ভাল জানেন।
ড্যানিয়েল প্রাইডেন

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

29

এটি একটি সম্পূর্ণ উত্তর নয় ( mhlester ইতিমধ্যে অনেক ভাল জমি আবৃত আমি নকল করব না), তবে আমি জোর দিয়ে বলতে চাই যে আপনি যে ভিত্তিতে কাজ করছেন তার উপর একটি সংখ্যার প্রতিনিধিত্ব কতটা নির্ভর করে।

ভগ্নাংশ 2/3 বিবেচনা করুন

গুড-ওল 'বেস 10-এ, আমরা সাধারণত এটি কিছু হিসাবে লিখি

  • 0,666 ...
  • 0,666
  • 0,667

যখন আমরা এই উপস্থাপনাগুলি দেখি, আমরা তাদের প্রত্যেককে 2/3 ভগ্নাংশের সাথে যুক্ত করার প্রবণতা করি, যদিও কেবল প্রথম উপস্থাপনাটি ভগ্নাংশের সমান গাণিতিকভাবে সমান। দ্বিতীয় এবং তৃতীয় উপস্থাপনা / অনুমানের 0.001 এর ক্রমটিতে একটি ত্রুটি রয়েছে, যা আসলে 9.2 এবং 9.1999999999999993 এর মধ্যে ত্রুটির চেয়ে অনেক খারাপ। আসলে, দ্বিতীয় প্রতিনিধিত্ব এমনকি সঠিকভাবে বৃত্তাকার হয় না! তবুও, 2/3 সংখ্যার অনুমান হিসাবে আমাদের 0.666 নিয়ে সমস্যা নেই, সুতরাং বেশিরভাগ প্রোগ্রামে 9.2 কীভাবে প্রায় হয় তা নিয়ে আমাদের সত্যিই সমস্যা হওয়া উচিত নয়(হ্যাঁ, কিছু প্রোগ্রামে এটি গুরুত্বপূর্ণ)

সংখ্যা বেস

সুতরাং এখানে নম্বর ঘাঁটি ক্রুশাল হয়। যদি আমরা বেস 3 তে 2/3 উপস্থাপন করার চেষ্টা করছিলাম তবে

(2/3) 10 = 0.2 3

অন্য কথায়, বেসগুলি স্যুইচ করে আমাদের একই সংখ্যার জন্য একটি নির্ভুল, সীমাবদ্ধ প্রতিনিধিত্ব আছে! গ্রহণযোগ্যতাটি হ'ল যদিও আপনি যে কোনও সংখ্যাকে যে কোনও বেসে রূপান্তর করতে পারেন, সমস্ত যুক্তিযুক্ত সংখ্যার কিছু বেসগুলিতে সঠিক সীমাবদ্ধ প্রতিনিধিত্ব রয়েছে তবে অন্যগুলিতে নয়

এই পয়েন্টটি বাড়িতে চালাতে, আসুন 1/2 দেখুন at এটি আপনাকে অবাক করে দিতে পারে যে যদিও এই নিখুঁত সরল সংখ্যার ভিত্তি 10 এবং 2 তে যথাযথ উপস্থাপনা রয়েছে তবে এর জন্য বেস 3-এ পুনরাবৃত্তি উপস্থাপনা প্রয়োজন।

(1/2) 10 = 0.5 10 = 0.1 2 = 0.1111 ... 3

ভাসমান পয়েন্ট সংখ্যাগুলি কেন সঠিক নয়?

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


3
তাই অন্য কথায়, বেস-3 জন্য নিখুঁত হতে হবে 1/3ঠিক যেমন 10-ভিত্তিক জন্য নির্ভুল 1/10
উভয়ই

2
@mhlester হ্যাঁ এবং সাধারণভাবে, বেস-এন যেকোন ভগ্নাংশের জন্য উপযুক্ত, যার ডিনোমিনেটর Nবা এর একাধিক।
নিকু স্টুর্কা

2
এবং এটি একটি কারণ যা কিছু সংখ্যক সরঞ্জাম বাক্সগুলি "কী দ্বারা ভাগ করা হয়েছিল" এবং তার প্রক্রিয়াতে সমস্ত যুক্তিযুক্ত সংখ্যার জন্য "অসীম নির্ভুলতা" রাখতে পারে। যেমন পদার্থবিজ্ঞানীরা তাদের সমীকরণগুলি শেষ সম্ভাব্য মুহূর্ত পর্যন্ত প্রতীকী রাখতে চান, πইত্যাদির কারণগুলি বাতিল হয়ে যায়।
ফ্লোরিস

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

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

13

অন্য সমস্ত উত্তর ভাল থাকলেও একটি জিনিস এখনও অনুপস্থিত:

এটা তোলে অযৌক্তিক সংখ্যার উপস্থাপন করা অসম্ভব (যেমন π, sqrt(2), log(3)অবিকল, ইত্যাদি)!

এবং এ কারণেই তাদের অযৌক্তিক বলা হয়। বিশ্বে কোনও পরিমাণ বিট স্টোরেজই তাদের একটিরও রাখা যথেষ্ট হবে না। কেবল প্রতীকী গাণিতিকই তাদের নির্ভুলতা সংরক্ষণ করতে সক্ষম।

যদিও আপনি যদি নিজের গণিতের প্রয়োজনগুলি যুক্তিসঙ্গত সংখ্যায় সীমাবদ্ধ রাখেন তবে কেবল নির্ভুলতার সমস্যাটি পরিচালনাযোগ্য হয়ে উঠবে। আপনার এক জোড়া (সম্ভবত খুব বড়) পূর্ণসংখ্যার সঞ্চয় করতে হবে aএবং bভগ্নাংশ দ্বারা প্রতিনিধিত্ব করা সংখ্যাটি ধরে রাখতে হবে a/b। আপনার সমস্ত গাণিতিকগুলি উচ্চ বিদ্যালয়ের গণিতের মতো ভগ্নাংশগুলিতে করা উচিত (যেমন a/b * c/d = ac/bd)।

তবে অবশ্যই আপনি এখনও যখন ঝামেলা একই ধরনের মধ্যে চালানো হবে pi, sqrt, log, sin, ইত্যাদি যুক্ত।

টি এল; ডিআর

হার্ডওয়্যার গতিযুক্ত গাণিতিকের জন্য যুক্তিযুক্ত সংখ্যার একটি সীমিত পরিমাণের প্রতিনিধিত্ব করা যেতে পারে। প্রতিটি প্রতিনিধিত্বমূলক সংখ্যা আনুমানিক হয়। কিছু সংখ্যা (অর্থাত্ অযৌক্তিক) কোনও কারণই সিস্টেমের প্রতিনিধিত্ব করা যায় না।


4
মজার বিষয় হল, অযৌক্তিক ঘাঁটি রয়েছে। পিনারি উদাহরণস্বরূপ।
Veedrac

5
অযৌক্তিক সংখ্যাগুলি (কেবল) তাদের বেসে উপস্থাপিত হতে পারে। উদাহরণস্বরূপ পাই বেস
পাইতে

4
পয়েন্টটি বৈধ থাকে: কিছু সংখ্যা সিস্টেমের বিবেচ্য নয় be আপনি নিজের ভিত্তি পরিবর্তন করে কিছুই অর্জন করতে পারবেন না কারণ অন্য কিছু সংখ্যা আর উপস্থাপন করা যাবে না।
লম্পএন

4

অসীম অনেকগুলি আসল সংখ্যা রয়েছে (এতগুলি যে আপনি এগুলি গণনা করতে পারবেন না), এবং অনেকগুলি যুক্তিযুক্ত সংখ্যা রয়েছে (এটি গণনা করা সম্ভব) is

ভাসমান-পয়েন্ট উপস্থাপনা একটি সীমাবদ্ধ (কম্পিউটারের কোনও কিছুর মতো) তাই অনিবার্যভাবে অনেকগুলি সংখ্যার প্রতিনিধিত্ব করা অসম্ভব। বিশেষত, 64 টি বিট আপনাকে কেবলমাত্র 18,446,744,073,709,551,616 বিভিন্ন মান (যা অনন্তের তুলনায় কিছুই নয়) এর মধ্যে পার্থক্য করতে দেয়। স্ট্যান্ডার্ড কনভেনশন সহ 9.2 তাদের মধ্যে একটি নয়। যেগুলি ফর্মের এম 2 and ই হতে পারে কিছু পূর্ণসংখ্যার এম এবং ই এর জন্য।


আপনি উদাহরণস্বরূপ 10 ভিত্তিক একটি আলাদা সংখ্যা সিস্টেম নিয়ে আসতে পারেন যেখানে 9.2 এর সঠিক প্রতিনিধিত্ব থাকবে। তবে অন্যান্য সংখ্যা, 1/3 বলুন, এখনও প্রতিনিধিত্ব করা অসম্ভব।


এছাড়াও নোট করুন যে ডাবল-স্পষ্টতা ভাসমান-পয়েন্ট সংখ্যাগুলি অত্যন্ত নির্ভুল। তারা 15 টিরও বেশি সংখ্যার সাথে খুব বিস্তৃত পরিসরে যে কোনও সংখ্যার প্রতিনিধিত্ব করতে পারে। দৈনন্দিন জীবনের গণনার জন্য, 4 বা 5 সংখ্যা পর্যাপ্ত চেয়ে বেশি। আপনি যদি আপনার জীবনকালের প্রতিটি মিলি সেকেন্ড গণনা করতে না চান তবে আপনার আর কখনও সত্যই 15 টি প্রয়োজন হবে না।


1

বাইনারি ভাসমান পয়েন্টে আমরা 9.2 কে উপস্থাপন করতে পারি না কেন?

ভাসমান পয়েন্ট সংখ্যা হ'ল (সামান্য সরলকরণ) একটি সীমিত সংখ্যার সংখ্যাসূচক এবং চলনীয় রেডিক্স পয়েন্ট সহ একটি অবস্থানিক সংখ্যা পদ্ধতি।

একটি ভগ্নাংশটি কেবলমাত্র অবস্থানগত সংখ্যায়ন ব্যবস্থায় সীমাবদ্ধ সংখ্যার অঙ্কের সাহায্যে প্রকাশ করা যেতে পারে যদি ডিনোমিনেটরের মূল উপাদানগুলি (যখন ভগ্নাংশটি সর্বনিম্ন শর্তে প্রকাশ করা হয়) বেসের উপাদান হয়।

10 এর প্রধান গুণনীয়ক 5 এবং 2, সুতরাং বেস 10 এ আমরা ফর্মের যেকোন ভগ্নাংশকে একটি / (2 বি 5 সি ) উপস্থাপন করতে পারি।

অন্যদিকে 2 এর একমাত্র প্রধান ফ্যাক্টর 2, সুতরাং বেস 2 তে আমরা কেবল ফর্মটির ভগ্নাংশকে একটি / (2 বি ) উপস্থাপন করতে পারি

কম্পিউটার কেন এই উপস্থাপনা ব্যবহার করে?

কারণ এটি কাজ করার জন্য এটি একটি সাধারণ ফর্ম্যাট এবং এটি বেশিরভাগ উদ্দেশ্যে যথেষ্ট সঠিক। মূলত একই কারণে বিজ্ঞানীরা "বৈজ্ঞানিক স্বরলিপি" ব্যবহার করেন এবং প্রতিটি ফলাফলে তাদের ফলাফলগুলি যুক্তিসঙ্গত সংখ্যায় নিয়ে যান।

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

তবে বড় সমস্যা হ'ল এই ধরণের ফর্ম্যাটটি গণনা করতে ব্যথা। দুটি কারণে।

  1. আপনি যদি প্রতিটি সংখ্যার ঠিক একটি উপস্থাপনা পেতে চান তবে প্রতিটি গণনার পরে আপনার ভগ্নাংশটি এটি সর্বনিম্ন শর্তে হ্রাস করতে হবে। এর অর্থ হ'ল প্রতিটি অপারেশনের জন্য আপনাকে মূলত একটি দুর্দান্ত সাধারণ বিভাজক গণনা করতে হবে।
  2. যদি আপনার গণনার পরে আপনি একটি প্রতিনিধিত্বমূলক ফলাফল দিয়ে শেষ করেন কারণ আপনাকে যে নিকটকের নিকটতম প্রতিনিধিত্বমূলক ফলাফল খুঁজে পেতে হবে সেই সংখ্যা বা ডিনোমিনেটরটি আপনার প্রয়োজন। এটি অ-ট্রিভিল।

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

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


-4

এটা চেষ্টা কর

DecimalFormat decimalFormat = new DecimalFormat("#.##");
String.valueOf(decimalFormat.format(decimalValue))));

' decimalValue' রূপান্তর করার জন্য আপনার মান।

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