Numeric Overflow in C++

Numeric Overflow in C++: ज्यादातर Computers में Long Integer प्रकार का Variable हमें अधिकतम 4294967296 तक के मान को Store करने की सुविधा प्रदान करता है, जो कि हालांकि काफी बडे मान को Store करने में सक्षम है लेकिन फिर भी ये एक सीमित संख्‍या है। Mathematical Calculations में हमें कई बार अनन्त तक को Store करना होता है। इस स्थिति में जब हमारा मान Long Integer की Limit से भी Over हो जाता है, तो इस प्रक्रिया को Numeric Overflow कहते हैं। मानलो कि यदि हम किसी Program में 1989000 को 500 से गुणा करवाते हैं तो हमें निम्नानुसार Output प्राप्त होता हैः

// File : NumericOverFlow.cpp
#include <iostream.h>
#include <conio.h>

void main()
{
  long n = 198900;
  cout << “N = “ << n << endl;

  n = n * 500;
  cout << “N = “ << n << endl;

  n = n * 500;
  cout << “N = “ << n << endl;

  getch();
}

Output
  N = 198900
  N = 99450000
  N = -1814607552

इस Program के Output में हम देख सकते हैं कि तीसरी बार जब संख्‍या को गुणा किया जाता है, तो मान Long Data Type के Variable की Range से Over हो जाता है, इसलिए हमें प्राप्त होने वाला मान Minus में प्राप्त होता है। जबकि इसी Program में यदि हम Float का प्रयोग करते हैं, तो कई Advance Compilers में Floating Point के Overflow होने पर एक गलत मान के स्थान पर हमें Output में हमें “Infinity” Display होता है।

Round-Off Errors

कई बार हम Floating Point Number पर Calculation Perform करते हैं और उन्हें Condition Testing में Use कर लेते हैं। वास्तव में हमें ऐसा नहीं करना चाहिए। क्योंकि Floating Point Values हमेंशा समान मान Return नहीं करते हैं।  इसे समझने के लिए निम्न Program देखिएः

// File : RoundOffError.cpp
#include <iostream.h>
#include <conio.h>

void main()
{
  float nf = 1.0/3;
  float nd = 0.333333;
  bool flag;

  flag = (nf==nd);
  cout << "Flag = " << flag << endl;
  cout << "NF = " << nf << endl;
  cout << "ND = " << nd << endl;

  nf = 0.333333;

  flag = (nf==nd);
  cout << "nFlag = " << flag << endl;
  cout << "NF = " << nf << endl;
  cout << "NS = " << nd << endl;

  getch();
}

Output
  Flag = 0
  NF = 0.333333
  ND = 0.333333

  Flag = 1
  NF = 0.333333
  ND = 0.333333

इस Program के Output में हम देख सकते हैं कि 1.0/3 करने पर भी 0.333333 ही आता है। लेकिन जब हम 1.0/3 को 0.333333 से Compare करते हैं, तब प्राप्त होने वाले Result व NF में 1.0/3 के स्थान पर 0.333333 कर देने पर प्राप्त होने वाले Result में क्या अन्तर है। जहां पहला Statement हमें False Return करता है, वहीं दूसरा Statement हमें True Return कर रहा है। इसीलिए कभी भी दो Floating Point Values को तब तक आपस में Compare नहीं करवाना चाहिए जब तक कि हम Result के प्रति पूरी तरह से आश्‍वस्त ना हों। (Numeric Overflow in C++)

CPP Programming Language in Hindiये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook C++ Programming Language in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

C++ Programming Language in Hindi | Page: 666 | Format: PDF

BUY NOW GET DEMO REVIEWS