কি কি? · bei.pm
এই বিভাগে ডেটা ফরম্যাট এবং রিভার্স ইঞ্জিনিয়ারিং সম্পর্কিত নিবন্ধ রয়েছে।
কিন্তু এখন ব্যাপারটি এইরকম:
বহুতরকম প্রোগ্রামিং ভাষা আছে এবং অনেক মানুষ কিছু বিষয় সম্পূর্ণ ভিন্ন নাম দিয়ে জানেন - অথবা এমনকি মৌলিক বিষয়গুলির অস্তিত্ব সম্পর্কে কোনও ধারণাই নেই, কারণ তাদের প্রোগ্রামিং ভাষা সেগুলিকে তাদের থেকে বিমূর্ত করে রেখেছে।
tl;dr:
আমার নোটেশন মূলত C99 <stdint.h>
এর উপর ভিত্তি করে। যারা এই নোটেশন বুঝতে পারে, তারা আমার নোটেশন সহজেই বুঝতে পারবে।
পূর্ণসংখ্যা
ইন্টিজাৰ সৰলভাৱে কৈলে হৈছে সম্পূৰ্ণ সংখ্যা, অৰ্থাৎ দশমিক অংশ নথকা সংখ্যা।
ইন্টিজাৰ সাধারণতে ডাটা ফৰ্মেটসমূহত এটা নিৰ্দিষ্ট সংখ্যা পৰিসৰৰ ভিতৰত, প্ৰায় একট বিচাৰণাত, সংজ্ঞায়িত হয়। মই ইয়াক বিটত উল্লেখ কৰোঁ - কাৰণ "বাইট" আৰু তাৰ ওপৰত নিৰ্মিত প্ৰকাৰবোৰ (Word, Qword, ...) সাধাৰণতে প্লাটফৰ্মৰ ওপৰত নিৰ্ভৰ কৰে।
ইন্টিজাৰ প্ৰকাৰসমূহৰ ভিতৰত প্ৰাকৃতিক সংখ্যা (ℕ, অৰ্থাৎ সঙ্কেত নথকা - Unsigned) আৰু সম্পূৰ্ণ সংখ্যা (ℤ, অৰ্থাৎ সঙ্কেত থকা - Signed)ৰ মাজত পাৰ্থক্য কৰা হয়।
এই তথ্য এটা সঙ্কেতৰ দ্বাৰা চিহ্নিত কৰা হয় (u
অথবা s
)।
এবং, এটা সঙ্কেত থকা সম্পূৰ্ণ সংখ্যা সাধাৰণতে একৰূপ সম্পূৰ্ণ সংখ্যা ৰূপে অথবা দ্বৈত সম্পূৰ্ণ সংখ্যা ৰূপে প্ৰকাশ কৰা হয়।
যেতিয়া অন্যথা উল্লেখ নহয়, তেতিয়া দ্বৈত সম্পূৰ্ণ সংখ্যা ব্যৱহাৰ কৰা হয়, কাৰণ ই আধুনিক কম্পিউটাৰত প্ৰিয় ৰূপ প্ৰকাশ কৰে।
সঙ্কেত নথকা সংখ্যা মই মোৰ নথিপত্ৰত uint
হিচাপে উল্লেখ কৰোঁ, তাৰ পাছত সঠিকতাৰ উল্লেখ বিটত।
সঙ্কেত থকা সংখ্যা মই মোৰ নথিপত্ৰত sint
হিচাপে উল্লেখ কৰোঁ, তাতো সঠিকতাৰ উল্লেখ বিটত।
মই "char" ডাটা প্ৰকাৰটোৰ ব্যৱহাৰ এৰাই চলোঁ চিহ্নৰ বাবে, কাৰণ চিহ্নৰ শৃঙ্খলাবোৰ সাধাৰণতে মাথোঁ ইন্টিজাৰ মানৰ শৃঙ্খলা বিশেষ অৰ্থৰ সৈতে প্ৰকাশ কৰে।
সেয়ে, সিহঁতক uint(8)[] হিচাপে প্ৰকাশ কৰা হয়।
উদাহৰণসমূহ:
নোটেশন | C99 stdint.h -সমতুল্য |
বর্ণনা | সংখ্যার পরিসর |
---|---|---|---|
uint(16) | uint16_t | অবৈধ পূর্ণসংখ্যা, 16 বিট দৈর্ঘ্য | 0 - 65.535 |
sint(8) | int8_t | স্বাক্ষরিত পূর্ণসংখ্যা, 8 বিট দৈর্ঘ্য, দুইয়ের সম্পূরক | -126 - 127 |
uint(24) | uint32_t:24 | অবৈধ পূর্ণসংখ্যা, 24 বিট দৈর্ঘ্য | 0 - 16.777.216 |
স্থায়ী দশমিক মান
ফিক্সড-পয়েন্ট মান হল সংখ্যা মান যা রিয়েল সংখ্যার (Q) পরিসরের অন্তর্ভুক্ত, যা কমা এবং দশমিক স্থান রাখে।
ফিক্সড-পয়েন্ট মানে - নাম থেকেই বোঝা যায় - কমার অবস্থান ডেটা প্রকার দ্বারা স্থিরভাবে নির্ধারিত হয়।
এই কারণে এই ডেটা প্রকারের জন্য একটি স্থির সংখ্যা পরিসর পাওয়া যায়; গাণিতিকভাবে বলা যায় যে সংখ্যা স্থান সীমিত।
বাস্তবতায়, এই ডেটা প্রকার প্রধানত এমন প্ল্যাটফর্মগুলিতে ব্যবহৃত হয় যেখানে যথেষ্ট দ্রুত ফ্লোটিং-পয়েন্ট হার্ডওয়্যার ইউনিট নেই, কারণ ফিক্সড-পয়েন্ট মানের গণনা ইন্টিজার ইউনিটের মাধ্যমে করা যেতে পারে।
এছাড়াও, ডেটা প্রকারটি উদাহরণস্বরূপ ডেটাবেস ব্যবস্থাপনা সিস্টেম দ্বারা ব্যবহার করা হয়, যখন নিশ্চিত প্রয়োজনীয়তা পূরণ করতে হয়।
এখানে উদাহরণস্বরূপ আর্থিক তথ্যের স্থায়ী সংরক্ষণ ব্যবস্থার কথা ভাবা যেতে পারে; বেশিরভাগ মুদ্রা দশমিকের পরে 2টি স্থানে সীমাবদ্ধ।
(কিন্তু ফিক্সড-পয়েন্ট মান নেওয়া বুদ্ধিমান নয়; বরং সরাসরি সর্বনিম্ন মুদ্রা একক হিসাবে ইন্টিজার সংরক্ষণ করা এবং বাকি উপস্থাপন স্তরের জন্য ছেড়ে দেওয়া বেশি বুদ্ধিমানের কাজ হবে)
ইন্টিজার মানগুলির মতো, আমি ফিক্সড-পয়েন্ট মানে সংখ্যার আগে এবং পরে কমার সমাধান উল্লেখ করি:
ufixed(9,7)
একটি ডেটা প্রকার নির্দেশ করে যা সাইনবিহীন 9 বিটকে কমার আগে মানের জন্য এবং 7 বিটকে কমার পরে মানের জন্য সংরক্ষণ করে; মোট 16 বিট প্রশস্ত এবং উদাহরণস্বরূপ দুটি স্বতন্ত্র ইন্টিজারের ভেক্টর হিসাবে (0,0) থেকে (511,127) একটি পরিসর কভার করতে পারে।
তবে এই ব্যাখ্যা তার দশমিক রূপে 28 সংখ্যা অপব্যবহার করবে, কারণ সম্ভবত বাস্তবে (511,99) এ সীমাবদ্ধ থাকার সম্ভাবনা বেশি।
ফিক্সড-পয়েন্ট মানের সরাসরি ব্যাখ্যার পরিবর্তে, যা 2 আলাদা ইন্টিজারের একটি ভেক্টর হিসাবে বিবেচিত হয় - যা প্রায়শই দশমিক সংখ্যায় রূপান্তরের সময় একটি অপ্রয়োজনীয় ডেটা স্থান এবং একটি ম্যানুয়াল স্থানান্তর নির্দেশ করে - বরং দশমিক স্থানটি তাদের সম্পূর্ণ সমাধানের ভগ্নাংশ হিসাবে ব্যাখ্যা করা যেতে পারে।
এবং আগের উল্লেখিত ufixed(9,7)
উদাহরণে, একটি ভগ্নাংশ 27 এর হিসাবে ওঠে - সংখ্যা পরিসর তারপর 0,00 থেকে 511 + 126⁄127 পর্যন্ত চলে যায়।
দশমিক রূপান্তরের জন্য, তাই দশমিক স্থান 128 দ্বারা ভাগ করতে হবে।
এই ভ্যারিয়েন্টের মাধ্যমে গণনা সহজেই করা যায়, কারণ স্থানান্তর স্বয়ংক্রিয়ভাবে ঘটে, ফলে সাধারণত এই ভ্যারিয়েন্টটি পছন্দসই হয়।
তবে এই ভ্যারিয়েন্টের অসুবিধা হলো যে দশমিক রূপে দশমিক স্থানগুলির আর একটি নিশ্চিত সমাধান নেই, একটি একক দশমিক স্থান আর 0.01
এর সমমান নয়, বরং 0.007874
ধারণ করে, যা সংশ্লিষ্ট গুণনীয় ত্রুটির দিকে নিয়ে যাবে।
কোন ব্যাখ্যা পদ্ধতি ব্যবহৃত হয় তা যথাযথভাবে ব্যবহারস্থলে নথিবদ্ধ করা হয়।
ভাসমান বা স্লাইডিং পয়েন্ট মান
ফ্লোটিং পয়েন্ট মান গাণিতিকভাবে জটিল প্রকাশ, যেখানে একটি পূর্ণ সংখ্যা নির্দিষ্ট রেজোলিউশনের মাধ্যমে একটি গাণিতিক সূত্রের মাধ্যমে প্রকাশিত হয়, যাতে কার্যকরভাবে দশমিক অংশ স্থানান্তরের মাধ্যমে গঠিত হয় - এবং এটি সরাসরি বৈজ্ঞানিক নোটেশনের দিকে নির্দেশ করে।
এটি বাস্তবায়নের জন্য সবচেয়ে সাধারণ উপায় হল
IEEE 754 যা আন্তর্জাতিকভাবে স্বীকৃত হয়েছে।
এতে, একটি ফ্লোটিং পয়েন্ট মান সাধারণত নিম্নলিখিত উপাদানগুলি নিয়ে গঠিত:
চিহ্ন (0 অথবা 1 ) |
এক্সপোনেন্ট | মেন্টিস |
যদিও চিহ্নটি বাইনারি হ্যাঁ/না তথ্য হিসেবে সহজেই নির্ধারণ করা যায়, প্রকৃত সংখ্যা গঠিত হয় সমীকরণের মাধ্যমে
মেন্টিস * 2এক্সপোনেন্ট
অতিরিক্ত, কিছু স্থির মান রয়েছে, যা বিশেষ ক্ষেত্রে যুক্তিসঙ্গত সংখ্যা কভার করে - এর মধ্যে ±∞
এবং NaN
("কোন বৈধ সংখ্যা নেই") অন্তর্ভুক্ত।
ফ্লোটিং পয়েন্ট মানগুলো বিশেষভাবে উপকারী যখন নির্ভুলতা এত গুরুত্বপূর্ণ নয়, যেহেতু এই ধরনের মানগুলিতে প্রান্তিক ত্রুটি এবং এর ফলে নির্ভুলতার ক্ষতি হয়। সাধারণভাবে, ফ্লোটিং পয়েন্ট মানগুলি উদাহরণস্বরূপ স্থানাঙ্কের সংজ্ঞায় ব্যবহৃত হয়, যেমন 3D মডেলে শীর্ষ ভেক্টর বা অপটিক্যাল উপস্থাপনার উদ্দেশ্যে বেজিয়ার/স্প্লাইন বক্ররেখা।
ডেটা ফরম্যাটগুলোতে ফ্লোটিং পয়েন্ট মানগুলো float(মেন্টিস, এক্সপোনেন্ট)
হিসেবে নির্দিষ্ট করা হয়।
যদি IEEE 754 থেকে পৃথক কোনো ফরম্যাট ব্যবহার করা হয়, তবে তা যথাযথভাবে উল্লেখ করা হয়।