লুয়া কীভাবে পূর্ণসংখ্যা এবং ভাসমান উভয় নম্বর পরিচালনা করে?


11

যতদূর আমি নিজের প্রোগ্রামিংয়ের কথা মনে করি আমাকে সমতার জন্য ভাসমান পয়েন্ট সংখ্যা তুলনা করতে শেখানো হয়েছিল। এখন, লুয়ার ধরণ সম্পর্কে লুয়ায় প্রোগ্রামিং পড়ার সময় number, আমি নিম্নলিখিতগুলি পেয়েছি:

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

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



@ জুনাসপুলক্কা ধন্যবাদ, এটি বেশ মূল্যবান সংযোজন।
পেটর আব্দুলিন

উত্তর:


11

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

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

যদি এর চেয়ে বেশি সংখ্যক নির্ভুলতার প্রয়োজন হয় তবে আপনি সর্বদা একটি স্বেচ্ছাসেবী-নির্ভুলতা গ্রন্থাগার নিয়োগ করতে পারেন ।

আরও পঠন
লুয়া একটি সংখ্যার সর্বোচ্চ মূল্য কত?


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

2
@AndresF। আমি দেখতে পাচ্ছি না এটি কত দ্রুত, যদি না আপনি দুজনের পরিবর্তে একক সংখ্যক প্রকার ব্যবহার করে একটি কাস্ট মুছে ফেলেন।
রবার্ট হার্ভে

একমত। আমার কাছে কোন লাভ করে না। আমি অবাক হই যদি এটি প্রসঙ্গের বাইরে নেওয়া হয় ...
অ্যান্ড্রেস এফ

1
পর্যাপ্ত পরিমাণে বড় পূর্ণসংখ্যা কোনও ভাসমান-পয়েন্ট অবজেক্টে ঠিক সংরক্ষণ করা যায় না । একটি 64-বিটের doubleপ্রায় 51 বা ম্যান্টিসার বিট রয়েছে; বিজোড় পূর্ণসংখ্যার প্রায় 2 ** 51 এর চেয়ে বেশি বড় গোলাকটি ত্রুটি থাকবে। একটি 64-বিট পূর্ণসংখ্যা বৃহত্তর পূর্ণসংখ্যার মানগুলি হুবহু সংরক্ষণ করতে পারে, কারণ এটি কোনও বিটকে কোনও বিট উত্সর্গ করে না।
কিথ থমসন

@ কিথথম্পসন: আমি যখন "মন্টিসায় সঞ্চিত ছিলাম" বলেছিলাম তখন আমার উত্তরটি এই উত্তরটিতে আবদ্ধ হয়েছিল বলে আমি ভেবেছিলাম। তবে, আমি স্পষ্ট করে উত্তর সম্পাদনা করব।
রবার্ট হার্ভে

6

ডাবলগুলি একটি ম্যান্টিসা এবং উদ্দীপক হিসাবে সংরক্ষণ করা হয়। আরও তথ্যের জন্য ফর্ম্যাটটি দেখুন । মূলত, সমস্ত সংখ্যা ফর্মের: ম্যান্টিসা * 2 এক্সপোনেন্ট । 2 52 এর চেয়ে কম সংখ্যক পূর্ণসংখ্যার জন্য , ব্যয়কারীর সংখ্যা শূন্য হবে, যা ম্যান্টিসাকে বিট-ফর-বিট হিসাবে 52-বিট স্বাক্ষরযুক্ত পূর্ণসংখ্যার সমান করে তুলবে। Negativeণাত্মক সংখ্যাগুলি নির্দেশ করতে একটি পৃথক সাইন বিট ব্যবহৃত হয়।

বাস্তবে, এমনকি 2 52 এর চেয়েও বড় কিছু সংখ্যক সঠিকভাবে উপস্থাপিত হতে পারে, যতক্ষণ না 52 এনডির সমস্ত অঙ্কগুলি শূন্য হয়। এছাড়াও, ০.৫ এর মতো কিছু ভগ্নাংশকে হুবহু উপস্থাপন করা যেতে পারে। এটি কেবল তখনই যখন ভগ্নাংশটি বেস 2 তে ক্রমাগত পুনরাবৃত্তি করা হয় (1/3 এর মতো), বা অন্যথায় র‌ডিক্স পয়েন্টের তুলনায় অনেকগুলি বিট প্রয়োজন যা আপনি যথার্থতা হারাবেন।


এটি নিয়মিত দশমিক বার বার করার কারণে নয়। এটি কারণ অনেক দশমিক (বেস দশ) সংখ্যাকে হ'ল দুটি হিসাবে শক্তি হিসাবে উপস্থাপন করা যায় না।
রবার্ট হার্ভে

3
বেস 2, সংখ্যা যে ঠিক প্রতিনিধিত্ব করা যাবে না যাবে একটানা পুনরাবৃত্তি হবে। উদাহরণস্বরূপ, 0.1 ডেসিমাল বাইনারি 0.0 (0011) হয়ে যায়, 0011 ক্রমাগত পুনরাবৃত্তি করে।
কার্ল বিলেফেল্ড

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