কেউ কি স্মৃতিতে ভাসমান প্রতিনিধিত্ব ব্যাখ্যা করতে পারেন?


20

আমি আগের প্রশ্নটি পড়ার কারণে এটি সদৃশ প্রশ্ন নয়।

কেউ আমাকে বুঝতে সাহায্য করতে পারেন how float values are stored in the memory

আমার সন্দেহ এখানে রয়েছে ভাসমান মানগুলিতে ' .'( for example 3.45) কীভাবে '.'স্মৃতিতে উপস্থাপিত হবে?

কেউ দয়া করে আমাকে একটি চিত্র দিয়ে স্পষ্ট করতে পারেন?


21
সর্বনিম্ন প্রত্যাশিত উত্স, উইকিপিডিয়া সম্পর্কে কীভাবে? en.wikedia.org/wiki/Floating_Point# অভ্যন্তরীণ_ বিবরণ
9000

4
এবং আপনি মূল নিবন্ধটি যুক্ত করতে পারেন: আইইইই ভাসমান পয়েন্ট
মউভিচিয়েল

4
আপনি যদি আমার মতো হন এবং আপনি জিনিসগুলি নিয়ে খেলতে, ইনপুটগুলি রেখে এবং আউটপুট ইত্যাদির মাধ্যমে শিখতে চান তবে এই সাইটটি দেখুন: বাইনারি কনভার্ট
কনভার্ট_ডুবল

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

উত্তর:


44

দশমিক বিন্দু স্পষ্টভাবে কোথাও সংরক্ষণ করা হয় না; এটি একটি ডিসপ্লে ইস্যু।

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

বেস 10 এর পরিবর্তে বেস 2 ব্যবহার করে বৈজ্ঞানিক স্বরলিপিটির বৈকল্পিকের একটি ভাসমান-পয়েন্ট মান উপস্থাপন করে শুরু করুন উদাহরণস্বরূপ, মান 3.14159 হিসাবে প্রতিনিধিত্ব করা যেতে পারে

    0.7853975 * 2 2

0.7853975 হ'ল তাত্পর্যপূর্ণ , ম্যান্টিসা ওরফে; এটি উল্লেখযোগ্য সংখ্যাযুক্ত সংখ্যার অংশ। এই মানটি 3.14159 পেতে 2 পাওয়ার বাড়ানো বেস 2 দিয়ে গুণিত হয় lied

ভাসমান-পয়েন্ট নম্বরগুলি হ'ল তাত্পর্যপূর্ণ এবং এক্সপোনেন্ট (একটি চিহ্ন বিট সহ) সংরক্ষণ করে এনকোড করা হয়।

একটি সাধারণ 32-বিট লেআউটটি নিম্নলিখিতগুলির মতো কিছু দেখায়:

 3 32222222 22211111111110000000000
 1 09876543 21098765432109876543210
+-+--------+-----------------------+
| |        |                       |
+-+--------+-----------------------+
 ^    ^                ^
 |    |                |
 |    |                +-- significand 
 |    |
 |    +------------------- exponent 
 |
 +------------------------ sign bit

স্বাক্ষরিত পূর্ণসংখ্যার ধরণের মতো, উচ্চ-অর্ডার বিট চিহ্নটি নির্দেশ করে; 0 একটি ধনাত্মক মান নির্দেশ করে, 1 টি নেতিবাচক নির্দেশ করে।

পরের 8 টি বিট ব্যবহারকারীদের জন্য ব্যবহৃত হয়। উদ্দীপকগুলি ইতিবাচক বা নেতিবাচক হতে পারে, তবে অন্য সাইন বিট সংরক্ষণের পরিবর্তে এগুলি এনকোড করা হয়েছে যে 10000000 0 প্রতিনিধিত্ব করে, সুতরাং 00000000 -128 প্রতিনিধিত্ব করে এবং 11111111 127 প্রতিনিধিত্ব করে।

বাকি বিটগুলি তাৎপর্যের জন্য ব্যবহৃত হয়। প্রতিটি বিট বাম থেকে 2 গণনার নেতিবাচক শক্তির প্রতিনিধিত্ব করে, তাই:

    01101 = 0 * 2 -1 + 1 * 2 -2 + 1 * 2 -3 + 0 * 2 -4 + 1 * 2 -5 
          = 0.25 + 0.125 + 0.03125 
          = 0.40625

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

সুতরাং আমাদের 3.14159 এর মানটি এমন কিছু হিসাবে উপস্থাপিত হবে

    0 10000010 11001001000011111100111
    ^ ^ ^
    | | |
    | | + --- তাৎক্ষণিক = 0.7853975 ...
    | |
    | + ------------------- প্রকাশক = 2 (130 - 128)
    |
    + ------------------------- সাইন = 0 (ধনাত্মক)

    মান = -1 (সাইন) * 2 (উদ্ঘাটনকারী) * (গুরত্বপূর্ণ)
    মান = -1 0 * 2 2 * 0.7853975 ...
    মান = 3.14159 ...

এখন, আপনি যদি লক্ষ্য করে যে সমস্ত বিট যোগ করেন তবে তা লক্ষ্য করুন যে সেগুলি মোট 0.7853975 নয়; এগুলি আসলে 0.78539747 এ চলে আসে। হুবহু মানটি সংরক্ষণ করার জন্য পর্যাপ্ত পরিমাণে বিট নেই ; আমরা কেবল একটি আনুমানিক সঞ্চয় করতে পারি। তাত্পর্যপূর্ণ বিটের সংখ্যা নির্ভুলতা নির্ধারণ করে বা আপনি কতগুলি উল্লেখযোগ্য সংখ্যা সঞ্চয় করতে পারেন তা নির্ধারণ করে । 23 বিট আমাদের সূক্ষ্মতার প্রায় 6 দশমিক সংখ্যা দেয়। -৪-বিট ভাসমান বিন্দু ধরণের যথার্থতার জন্য প্রায় 12 থেকে 15 ডিজিট দিতে তাত্পর্যপূর্ণ পর্যায়ে যথেষ্ট পরিমাণে বিট সরবরাহ করে। কিন্তু সচেতন যে মান প্রতিনিধিত্ব করা যাবে না ঠিক কোন ব্যাপার আছে হতে কিভাবেআপনি ব্যবহার অনেক বিট। ১/৩ এর মতো মানগুলি দশমিক অঙ্কের একটি সীমাবদ্ধ সংখ্যায় প্রতিনিধিত্ব করা যায় না, তেমনি 1/10 এর মতো মানগুলিও বিটগুলির একটি সীমাবদ্ধ সংখ্যায় প্রতিনিধিত্ব করা যায় না। যেহেতু মানগুলি আনুমানিক, তাই তাদের সাথে গণনাগুলিও আনুমানিক এবং গোলাকার ত্রুটিগুলি জমে।

ব্যয়কারীর বিটের সংখ্যা ব্যাপ্তি নির্ধারণ করে (আপনি উপস্থাপন করতে পারবেন ন্যূনতম এবং সর্বাধিক মান)। তবে আপনি যখন আপনার সর্বনিম্ন এবং সর্বাধিক মানের দিকে এগিয়ে যান, উপস্থাপনযোগ্য মানগুলির মধ্যে ব্যবধানের আকারটি বৃদ্ধি পায়। এটি হ'ল যদি আপনি ঠিক 0.785397 এবং 0.785398 এর মধ্যে মানগুলি উপস্থাপন করতে না পারেন তবে আপনি 7.85397 এবং 7.85398 এর মধ্যে বা 78.5397 এবং 78.5398 এর মধ্যে মানগুলি বা 785397.0 এবং 785398.0 এর মধ্যে মানগুলি যথাযথভাবে উপস্থাপন করতে পারবেন না। খুব অল্প সংখ্যায় খুব বড় (বিশালতার দিক দিয়ে) সংখ্যাগুলির গুণনের সময় সতর্কতা অবলম্বন করুন।


"তবে অন্য একটি সাইন বিট সংরক্ষণের পরিবর্তে" আপনি যা বর্ণনা করছেন তা হলেন একটি স্বাক্ষরিত পূর্ণসংখ্যার সঠিক আচরণ।
সাইমন

6

.এ সব সঞ্চয় করা হয় না। প্রথমত, আপনার ইঞ্জিনিয়ারিং স্বরলিপিটি বোঝা উচিত, যার একটি নির্দিষ্ট-নির্ভুলতা ফ্যাক্টর এবং একটি পূর্ণসংখ্যা ব্যয়কারী রয়েছে: 11.0 · 10 0 = 1.0E0, 2 হয় 2.0E0, 10 হয় 1.0E1This এটি বড় সংখ্যার খুব সংক্ষিপ্ত স্বরলিপি দেয়। এক বিলিয়ন হয় 1.0E9। সামনে ফ্যাক্টর Eসাধারণত একটি নির্দিষ্ট স্পষ্টতা নম্বর হিসাবে notated হয়: 1.00000E9। এর ফলস্বরূপ, এক হাজার কোটি এবং এক = 1,000,000,001 এবং এক বিলিয়ন উভয়ই এই স্বরলিপিটিতে একই, যখন যথার্থতা যথেষ্ট পরিমাণে বড় হয় না। আরও মনে রাখবেন যে ফ্যাক্টরটি কখনই একটি অগ্রণী শূন্যের প্রয়োজন হয় না। পরিবর্তে, খালিটিকে হ্রাস করা যেতে পারে যতক্ষণ না এটি আর হয় না।

স্মৃতিতে, একটি ভাসমান পয়েন্ট সংখ্যাটি একইভাবে উপস্থাপিত হয়: এক বিটতে স্বাক্ষর থাকে, কিছু বিট ফ্যাক্টরটিকে স্থির-নির্ভুলতা সংখ্যা হিসাবে চিহ্নিত করে ("ম্যান্টিসা"), বাকী বিটগুলি ঘটিতকে গঠন করে। বেস -10 ইঞ্জিনিয়ারিং নোটেশনের উল্লেখযোগ্য পার্থক্য হ'ল অবশ্যই এখন বেস্টের বেস 2 রয়েছে প্রতিটি অংশের সঠিক আকারটি আপনি যে সঠিক ভাসমান-পয়েন্ট মানটি ব্যবহার করছেন তার উপর নির্ভর করে।


3
এটি "বৈজ্ঞানিক স্বরলিপি"। "ইঞ্জিনিয়ারিং স্বরলিপি" হ'ল যখন
ক্লিমেন্ট জে

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

1
@ ডেলান: এটি যদি সহায়তা করে তবে ম্যান্টিসার প্রতিটি বিট উচ্চতর বিটের অর্ধেক is সুতরাং, ভাসমানগুলি ম্যান্টিসার সীমাতে দুটি: 1/2, 1/4, 1/8, 1/16, 1/32, 1/64, 1/128, এবং আরও দুটি নেতিবাচক শক্তির পরিমাণ সঞ্চয় করতে পারে । সুতরাং একটি 32 বিট মধ্যে Epsilon floatহয় 2^-22 * exponent, অথবা 1/4194304 সম্পর্কে।
গ্রেফ্যাড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.