পূর্ণসংখ্যা থেকে একক রূপান্তর যখন যথাযথতা হারাতে পারে


27

আমি যখন অংশটি পেয়েছি তখন উইডেনিং রূপান্তর এবং বিকল্প স্ট্রাইক অন সংক্রান্ত মাইক্রোসফ্টের একটি নিবন্ধ পড়ছিলাম

নিম্নলিখিত রূপান্তরগুলি নির্ভুলতা হারাতে পারে:

  • পূর্ণসংখ্যা একক
  • দীর্ঘ থেকে একা বা ডাবল
  • একক বা ডাবল দশমিক

যাইহোক, এই রূপান্তরগুলি তথ্য বা তাত্পর্য হারাবে না।

.. তবে ডেটা প্রকার সম্পর্কিত অন্য আর্টিকেল অনুসারে ,

  • পূর্ণসংখ্যা টাইপ -2.147.483.648 থেকে 2.147.483.647 এবং এ সঞ্চয় করতে পারে

  • একক প্রকার থেকে সংরক্ষণ করতে পারেন

    • ইতিবাচক সংখ্যার জন্য 1,401298E-45 থেকে 3,4028235E + 38
    • এবং -3,4028235E + 38 থেকে - 1,401298E-45 নেতিবাচক সংখ্যার জন্য

.. সুতরাং একক পূর্ণসংখ্যার চেয়ে অনেক বেশি সংখ্যক সঞ্চয় করতে পারে। আমি বুঝতে পারি না যে পূর্ণসংখ্যা থেকে সিঙ্গলে এ জাতীয় রূপান্তরটি নির্ভুলতা হারাতে পারে। দয়া করে কেউ ব্যাখ্যা করতে পারেন?

উত্তর:


87

সিঙ্গেল পূর্ণসংখ্যার চেয়ে অনেক বেশি সংখ্যক সঞ্চয় করতে পারে

না, এটা পারে না। উভয় Singleএবং Integer32 বিট, যার অর্থ উভয়ই ঠিক একই পরিমাণে, 2 32 = 4294967296 স্বতন্ত্র সংখ্যা সঞ্চয় করতে পারে।

যেহেতু এর পরিসীমা এর Singleচেয়ে স্পষ্টভাবে বৃহত্তর, তা অবিলম্বে সুস্পষ্টভাবে ( পিজেনহোল নীতিমালার কারণে ) এটি সম্ভবত এই ব্যাপ্তির মধ্যে থাকা সমস্ত সংখ্যার প্রতিনিধিত্ব করতে পারে না

আর পরিসীমা থেকে Integerঠিক সংখ্যার সর্বোচ্চ পরিমাণ উভয় যে একই আকার Integerএবং Singleউপস্থাপন করতে পারেন, কিন্তু Singleএটা স্পষ্ট যে এটি সম্ভবত পরিসীমা ভিতরে সব সংখ্যার উপস্থাপন করতে পারবে না যে সীমার বাইরে সংখ্যার উপস্থাপন করতে পারেন, Integer

যদি এর মধ্যে কয়েকটি নম্বর Integerপ্রতিনিধিত্ব করা যায় না Single, তবে রূপান্তরিত Integerহতে Single হবে তথ্য হারাতে সক্ষম।


3
কেন এটি হতে হবে তার দুর্দান্ত ব্যাখ্যার জন্য +1 , যদিও প্রশ্নটি আসলে ছিল যখন ("কোন পরিস্থিতিতে") এটি ঘটে ...
ডাবল ইউ

21
@ ডাবল ইউ: 429146786 Integerএস (99.2%) এর মধ্যে 4261412864 হিসাবে প্রতিনিধিত্ব করা যায় না Single, সুতরাং "যখন" "বেশ প্রায় সর্বদা" থাকে।
Jörg ডব্লু মিত্তাগ

2
আপনি যদি আরও সুনির্দিষ্ট হতে চান তবে Singleকেবল 4,278,190,079 টি বিভিন্ন সংখ্যা উপস্থাপন করতে পারেন। একটি Singleমান একটি সংখ্যাকে প্রতিনিধিত্ব করে যদি কেবল এবং কেবলমাত্র সঞ্চিত পরিমাণযুক্ত 255 না হয়, যার অর্থ 255 * 2 ^ 24 Singleগুলি রয়েছে যা সংখ্যার প্রতিনিধিত্ব করে। এর মধ্যে তাদের মধ্যে দুজন একই সংখ্যার প্রতিনিধিত্ব করে (যথা শূন্য), এবং অন্যরা সকলেই বিভিন্ন সংখ্যা উপস্থাপন করে।
ট্যানার সোয়েট

10
en.wikipedia.org/wiki/Single-precision_floating-point_format IEEE754 binary32 জন্য চমত্কারভাবে সীমাবদ্ধতা ব্যাখ্যা করে। [-16777216,16777216](2 ^ 24 = তাত্পর্যপূর্ণ প্রস্থ) এর পূর্ণসংখ্যাগুলি হুবহু উপস্থাপন করা যেতে পারে। বড় সংখ্যাগুলি 2, 4, 8 এর নিকটতম একাধিককে গোল করে ... তারা কতটা বড় তার উপর নির্ভর করে।
পিটার কর্ডস

14
"যার মানে উভয় সংখ্যার সঠিক একই পরিমাণ সংরক্ষণ করতে পারেন" - এটা আছে না মানে। এর অর্থ কেবলমাত্র যদি উভয় প্রকারেরই প্রতিটি সংখ্যা সংরক্ষণের বিভিন্ন ধরণের একই পদ্ধতিতে থাকে। এবং এটি ঘটনা নয়; উদাহরণস্বরূপ, Singleশূন্য সঞ্চয় করার দুটি উপায় রয়েছে। সুতরাং Singleআসলে তুলনায় কম স্বতন্ত্র সংখ্যা প্রতিনিধিত্ব করতে পারেন Integer
কনরাড রুডল্ফ

28

ভাসমান পয়েন্টের ধরণগুলি (যেমন একক এবং ডাবল) একটি চিহ্ন, একটি ম্যান্টিসা এবং কোনও উদ্দীপক দ্বারা স্মৃতিতে উপস্থাপিত হয়। এটিকে বৈজ্ঞানিক স্বরলিপি হিসাবে ভাবেন:

Sign*Mantissa*Base^Exponent

তারা - যেমনটি আপনি প্রত্যাশা করতে পারেন - বেসটি 2 ব্যবহার করুন There এমন আরও কিছু টুইট রয়েছে যা অনন্ত এবং NaN উপস্থাপনের অনুমতি দেয়, এবং ঘাটিঘটিত অফসেট হয় (আবার ফিরে আসবে), এবং ম্যান্টিসার জন্য একটি সংক্ষিপ্তকরণ (এটিও ফিরে আসবে) । স্ট্যান্ডার্ড আইইইই 754 সন্ধান করুন যা আরও বিশদে তার প্রতিনিধিত্ব এবং ক্রিয়াকলাপকে কভার করে।

আমাদের উদ্দেশ্যগুলির জন্য আমরা এটি বাইনারি সংখ্যা "ম্যান্টিসা" এবং একটি "এক্সপোনেন্ট" হিসাবে কল্পনা করতে পারি যা আপনাকে দশমিক বিভাজক কোথায় রাখবে তা বলে দেয়।


সিঙ্গেলের ক্ষেত্রে, আমরা স্বাক্ষর করার জন্য তার 1 বিট, ঘোষকের পক্ষে 8 এবং ম্যান্টিসার জন্য 23 টি আছে।

এখন কথাটি হ'ল আমরা ম্যান্টিসাকে সবচেয়ে উল্লেখযোগ্য অঙ্ক থেকে সংরক্ষণ করব store মনে রাখবেন যে বাম দিকে সমস্ত শূন্যগুলি প্রাসঙ্গিক নয়। এবং আমরা যে বাইনারি কাজ করছি তা প্রদান করে, আমরা জানি যে সবচেয়ে উল্লেখযোগ্য সংখ্যাটি 1 ※ ※ ঠিক আছে, যেহেতু আমরা এটি জানি, আমাদের এটি সঞ্চয় করতে হবে না। শর্টহ্যান্ডকে ধন্যবাদ, ম্যান্টিসার কার্যকর পরিসর 24 বিট is

।: আমরা যে সংখ্যাটি সংরক্ষণ করছি তা শূন্য না হলে। তার জন্য আমাদের কাছে সমস্ত বিট শূন্যে সেট করা থাকবে। তবে, আমি যে বর্ণনাটি দিয়েছি তার অধীনে যদি আমরা তা ব্যাখ্যা করার চেষ্টা করি, তবে আপনার কাছে একটি 2 ^ 24 (অন্তর্নিহিত 1) 1 (2 দ্বারা বেদী 0 এর শক্তিতে) হবে। সুতরাং, এটি ঠিক করার জন্য, সূচক শূন্য একটি বিশেষ মান। এক্সপোনেন্টে অনন্ত এবং NaN সঞ্চয় করার জন্যও রয়েছে বিশেষ মান।

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


এর অর্থ হ'ল বড় সংখ্যক জন্য, ভাসমান পয়েন্টের ধরণটি ম্যান্টিসার শেষের বাইরে দশমিক বিন্দু রাখবে।

মনে রাখবেন ম্যান্টিসাটি 24 বিটের একটি সংখ্যা। এটি কখনই 25 বিট সংখ্যার প্রতিনিধিত্ব করবে না ... এতে অতিরিক্ত বিট নেই। সুতরাং, একক 2 ^ 24 এবং 2 ^ 24 + 1 এর মধ্যে পার্থক্য করতে পারে না (এটি প্রথম 25 বিট সংখ্যা, এবং তারা শেষ বিটটিতে পৃথক হয়, যা একক হিসাবে প্রতিনিধিত্ব করা হয় না)।

সুতরাং, পূর্ণসংখ্যার জন্য এককটির পরিসীমা -2 ^ 24 থেকে 2 ^ 24 হয়। এবং 1 থেকে 2 ^ 24 যোগ করার চেষ্টা করার ফলে 2 ^ 24 ফলাফল আসবে (কারণ প্রকারের ক্ষেত্রে 2 ^ 24 এবং 2 ^ 24 + 1 একই মান)। অনলাইনে চেষ্টা করুন । এজন্য পূর্ণসংখ্যা থেকে একক রূপান্তর করার সময় তথ্যের ক্ষতি হয়। এবং এ কারণেই কোনও লুপ যা একক বা ডাবল ব্যবহার করে তা আপনার নজরে না নিয়েই অসীম লুপ হতে পারে।


এটি 1তাৎপর্যের মধ্যে অন্তর্ভুক্ত লিডিং বিটের একটি সঠিক ব্যাখ্যা নয় perfect এটি পক্ষপাতদুষ্ট-বহনকারী ক্ষেত্রটি শূন্য নয় বলে বোঝানো হয়েছে । সাবমনরমালস (ওরফে ডেনারমালস) সহ+-0.00 তাদের তাত্পর্যপূর্ণ অগ্রণী ভূমিকা রয়েছে। আমি অনুমান করি যে আপনি কেবল 0.0একটি সম্পূর্ণ বিশেষ কেস বিবেচনা করতে সহজ করতে পারবেন তবে 0.0বাস্তবে অন্যান্য সাবমনোরালগুলির মতো একই এনকোডিং বিধি অনুসরণ করুন।
পিটার কর্ডস

25

এখানে যখন থেকে রূপান্তর প্রকৃত উদাহরণ Integerথেকে Singleমে হারান স্পষ্টতা:

Singleটাইপ -16777216 থেকে 16777216 (সহ) সব পূর্ণসংখ্যার সংরক্ষণ করতে পারেন, কিন্তু এটা এই পরিসীমা বাইরে সব পূর্ণসংখ্যার সংরক্ষণ করতে পারবেন না। উদাহরণস্বরূপ, এটি 16777217 সংখ্যাটি সংরক্ষণ করতে পারে না that এই ক্ষেত্রে এটি 16777216 এর চেয়ে বেশি কোনও বিজোড় সংখ্যা সংরক্ষণ করতে পারে না ।

আমরা যদি উইন্ডোজ পাওয়ারশেল ব্যবহার করতে পারি তা দেখার জন্য আমরা যদি কোনওটিকে Integerএকটি Singleএবং পিছনে রূপান্তর করি তবে :

PS C:\Users\tanne> [int][float]16777213
16777213
PS C:\Users\tanne> [int][float]16777214
16777214
PS C:\Users\tanne> [int][float]16777215
16777215
PS C:\Users\tanne> [int][float]16777216
16777216
PS C:\Users\tanne> [int][float]16777217
16777216
PS C:\Users\tanne> [int][float]16777218
16777218
PS C:\Users\tanne> [int][float]16777219
16777220

লক্ষ্য করুন যে 16777217 গোল হয়ে নেমে 16777216 এ গেছে, এবং 16777219 16777220 এ গোল হয়েছে।


4
এবং ক্রমবর্ধমান প্রস্থের সাথে, নিকটতম প্রতিনিধিত্বমূলক গুলিগুলির মধ্যে দূরত্বের floatশক্তি হিসাবে বর্ধমান রাখে। en.wikedia.org/wiki/…
পিটার কর্ডস

12

ভাসমান পয়েন্টের ধরণগুলি পদার্থবিদ্যায় "বৈজ্ঞানিক স্বরলিপি" এর মতো। সংখ্যাটি একটি বিট বিভক্ত হয়ে একটি বিস্ফোরক (গুণক) এবং একটি ম্যান্টিসা (উল্লেখযোগ্য অঙ্ক) হয়। সুতরাং মানটির দৈর্ঘ্য বাড়ার সাথে সাথে ধাপের আকারও বৃদ্ধি পায়।

একক নির্ভুলতা ভাসমান পয়েন্টে 23 ম্যান্টিসার বিট রয়েছে তবে একটি "অন্তর্নিহিত 1" রয়েছে, সুতরাং ম্যান্টিসার কার্যকরভাবে 24 বিট রয়েছে। অতএব 2 24 এর দৈর্ঘ্য সহ সমস্ত পূর্ণসংখ্যার একক নির্ভুলতা ভাসমান স্থানে হুবহু উপস্থাপন করা যেতে পারে।

এর উপরে ধারাবাহিকভাবে কম সংখ্যক প্রতিনিধিত্ব করা যায়।

  • 2 24 থেকে 2 25 পর্যন্ত কেবলমাত্র সংখ্যার প্রতিনিধিত্ব করা যায়।
  • 2 25 থেকে 2 26 অবধি কেবল 4 এর গুণক উপস্থাপন করা যায়।
  • 2 26 থেকে 2 27 পর্যন্ত কেবল 8 এর গুণকগুলি উপস্থাপিত হতে পারে।
  • 2 27 থেকে 2 28 পর্যন্ত কেবল 16 এর গুণকগুলি উপস্থাপিত হতে পারে
  • 2 28 থেকে 2 29 পর্যন্ত কেবল 32 এর গুণকগুলি উপস্থাপিত হতে পারে
  • 2 29 থেকে 2 30 পর্যন্ত কেবল 64 এর গুণকগুলি উপস্থাপন করা যেতে পারে
  • 2 30 থেকে 2 31 পর্যন্ত কেবল 128 এর গুণকগুলি উপস্থাপন করা যেতে পারে

সুতরাং 2 32 টি 32 বিট স্বাক্ষরিত পূর্ণসংখ্যার মানগুলির মধ্যে কেবল 2 * (2 24 + 7 * 2 23 ) = 9 * 2 24 একক নির্ভুলতা ভাসমান পয়েন্টে উপস্থাপন করা যেতে পারে। এটি মোট 3.515625%।


8

একক নির্ভুলতার ফ্লোটগুলিতে যথাযথতার 24 বিট রয়েছে। এর যে কোনও কিছুই নিকটতম 24-বিট সংখ্যায় গোল হয়। দশমিক বৈজ্ঞানিক স্বরলিপিতে এটি বোঝা সহজ হতে পারে তবে মনে রাখবেন আসল ফ্লোটগুলি বাইনারি ব্যবহার করে।

বলুন আপনার কাছে মেমরির 5 দশমিক সংখ্যা রয়েছে। আপনি নিয়মিত স্বাক্ষরিত ইন্টের মতো তাদের ব্যবহার করতে পারেন, আপনাকে ০ থেকে ৯৯৯৯৯ এর মধ্যে যে কোনও সংখ্যা থাকতে দেয় you আপনি যদি আরও বেশি সংখ্যক প্রতিনিধিত্ব করতে সক্ষম হতে চান, তবে আপনি বৈজ্ঞানিক স্বরলিপি ব্যবহার করতে পারেন এবং কেবলমাত্র দুটি সংখ্যা নির্ধারক হিসাবে বরাদ্দ করতে পারেন, তাই আপনি এখন 0 এবং 9.99 x 10 99 এর মধ্যে যে কোনও কিছু উপস্থাপন করতে পারেন ।

তবে, আপনি সবচেয়ে বড় সংখ্যাটি সঠিকভাবে উপস্থাপন করতে পারবেন এখন কেবলমাত্র 999 you আপনি 12345 উপস্থাপন করার চেষ্টা করলে আপনি 1.23 x 10 4 বা 1.24 x 10 4 পেতে পারেন তবে আপনি এর মধ্যে কোনও সংখ্যার প্রতিনিধিত্ব করতে পারবেন না কারণ আপনি পর্যাপ্ত সংখ্যা উপলব্ধ নেই।


3
দশমিক অঙ্কগুলি ব্যবহার করা একটি দুর্দান্ত ধারণা যা এটি বোঝা সহজ করে তোলে তবে শেষ অনুচ্ছেদটি কিছুটা বিভ্রান্তিকর: আসলে আপনি সংখ্যাগুলি 999 এর চেয়ে বেশি প্রতিনিধিত্ব করতে পারেন এবং আপনার উদাহরণটি এটি দেখায়: 12300 হবে 1.23 x 10 <sup> 4 < >। আপনি যা বলতে চাইছেন তা হ'ল সেই সংখ্যাটি থেকে শুরু করে ফাঁক রয়েছে। আপনি কিছুটা rephrasing মনে হবে?
ফ্যাবিও মনিকাকে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.