মডিউল ১-৯+ মডিউল ১-১০: ডেটা টাইপ লিমিটেশন

সি প্রোগ্রামিংয়ে ডেটা টাইপের সীমাবদ্ধতা

কম্পিউটারের মধ্যে তথ্য সংরক্ষণের জন্য বিভিন্ন ডেটা টাইপ (data type) ব্যবহার করা হয়। প্রতিটি ডেটা টাইপের নিজস্ব কিছু সীমাবদ্ধতা থাকে। এই সীমাবদ্ধতা বুঝতে গেলে, কম্পিউটার মেমরি (memory) কীভাবে কাজ করে, সেটা জানা দরকার।

বিট (Bit) এবং বাইট (Byte) কী?

  • বিট (Bit): কম্পিউটার মেমোরির মৌলিক একক। এটি মাত্র দুটি মানই ধারণ করতে পারে: 0 (শূন্য) অথবা 1 (এক)। এই দুইটি মানই কম্পিউটারে তথ্য উপস্থাপন করে।

  • বাইট (Byte): 8 টি বিট (8 bits) মিলে একটা বাইট (byte) হয়। আমরা সাধারণত বাইট ব্যবহার করেই কম্পিউটারের মেমরি (memory size) নির্ণয় করি।

ডেটা টাইপের সীমাবদ্ধতা:

C প্রোগ্রামিংয়ে প্রতিটি ডেটা টাইপের নিজস্ব একটি নির্দিষ্ট আকার (size) থাকে, যা বাইটে (bytes) পরিমাপ করা হয়। এই আকারই সেই ডেটা টাইপটি কতটা বড় মান স্টোর করতে পারে, সেটা নির্ধারণ করে। ঠিক ডেটা টাইপ না বেছে নিলে প্রোগ্রামে ভুল ফলাফল আসতে পারে।

কিছু সাধারণ ডেটা টাইপ এবং তাদের সীমাবদ্ধতা:

ডেটা টাইপ
আকার (বিট)
মানের পরিসীমা

int

16 বা 32

-32768 থেকে 32767 (16 বিট) অথবা -2147483648 থেকে 2147483647 (32 বিট)

float

32

±1.7 x 10^38 (আনুমানিক)

double

64

±1.7 x 10^308 (আনুমানিক)

char

8

-128 থেকে 127

উদাহরণ সহ ব্যাখ্যা

1. পূর্ণ সংখ্যার সীমাবদ্ধতা - (Integer Overflow):

int population = 10000000000;  // এটি একটি 32 বিটের int এর সীমার চেয়ে বেশি

// এই মানটি int ভেরিয়েবলে সঠিকভাবে store হবে না এবং অপ্রত্যাশিত মান দেখা দিতে পারে।
printf("population: %d\n", population);

ব্যাখ্যা:

এই উদাহরণে, populationভেরিয়েবলে 10000000000 মান দেওয়া হচ্ছে, যা একটি 32 বিটের int এর সর্বোচ্চ ধারণক্ষমতার (-2147483648 থেকে 2147483647) চেয়ে বেশি। এ কারণে, এই মানটি ভেরিয়েবলে সঠিকভাবে store হবে না। পরিবর্তে, অপ্রত্যাশিত মান দেখা দিতে পারে। এটি আপনার প্রোগ্রামের লজিক নষ্ট করে ফেলতে পারে।

সমাধান:

এই সমস্যা এড়াতে, আরও বড় পূর্ণসংখ্যা স্টোর করার জন্য long int বা long long int ডেটা টাইপ ব্যবহার করা প্রয়োজন।

2. দশমিক সংখ্যার সীমাবদ্ধতা (Floating-Point Precision):

float distance = 12345678.987654321; //float এ এত বেশি দশমিক স্থান ধরা যায়না।

// হিসাব বা প্রিন্ট করার সময় সঠিক মান নাও পাওয়া যেতে পারে।
printf("distance: %f\n", distance);

ব্যাখ্যা:

এই উদাহরণে, float টাইপের distanceভেরিয়েবলে এত বেশি দশমিক স্থানের মান দেওয়া হচ্ছে, যা float সঠিকভাবে ধারণ করতে পারে না। ফলে, হিসাব বা প্রিন্ট করার সময় সঠিক মান নাও পাওয়া যেতে পারে।

সমাধান:

float এর পরিবর্তে double ডেটা টাইপ ব্যবহার করলে কিছুটা বেশি নিখুঁত মান পাওয়া যাবে।

Last updated