Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C/C++ में पूर्णांक को फ्लोट में असाइन करना और तुलना

डेटा प्रकार

प्रकारविवरणआकारसीमा
intहस्ताक्षरित पूर्णांक4 बाइट्स~±2 अरब
unsigned intअहस्ताक्षरित पूर्णांक4 बाइट्स0 से ~4 अरब
floatएकल परिशुद्धता फ्लोटिंग पॉइंट4 बाइट्स~7 दशमलव अंक परिशुद्धता
doubleदोहरी परिशुद्धता8 बाइट्स~15 दशमलव अंक परिशुद्धता

पूर्णांक को फ्लोट में असाइन करना

float f = 23;
unsigned int x = 23;
// दोनों 23 संग्रहीत करते हैं

f = 0xFFFFFFFF;  // 4,294,967,295
x = 0xFFFFFFFF;  // 4,294,967,295

// आउटपुट:
f = 4.29497e+09  // वैज्ञानिक संकेतन, परिशुद्धता हानि!
x = 4294967295   // सटीक मान

फ्लोट को पूर्णांक में असाइन करना

float f = 23.768;
unsigned int x = 23.768;

// आउटपुट:
f = 23.768
x = 23  // दशमलव भाग काट दिया गया!

तुलना व्यवहार

float f = 0xFFFFFFFF;  // 4.29497e+09
unsigned int x = 0xFFFFFFFF;  // 4294967295

if (f == x)
    printf("TRUE");  // प्रिंट होता है TRUE!
else
    printf("FALSE");

क्यों TRUE?

  • तुलना में, unsigned int को float में प्रोमोट किया जाता है
  • दोनों का आंतरिक प्रतिनिधित्व समान बिट पैटर्न बन जाता है
  • हालांकि, फ्लोट में परिशुद्धता हानि होती है बड़े पूर्णांकों के लिए

खतरनाक तुलना उदाहरण

#include <stdio.h>

int main() {
    float f = 16777217.0f;  // 2^24 + 1
    int i = 16777217;
    
    printf("f = %.0f\n", f);   // 16777216 (परिशुद्धता हानि!)
    printf("i = %d\n", i);     // 16777217
    
    if (f == i)
        printf("बराबर (गलत!)\n");
    else
        printf("असमान (सही)\n");
    
    return 0;
}

सर्वोत्तम अभ्यास

  1. फ्लोट और पूर्णांक की सीधी तुलना से बचें
  2. तुलना के लिए ईप्सिलॉन का उपयोग करें: fabs(f - i) < 0.0001
  3. बड़े पूर्णांकों के लिए double का उपयोग करें (53-बिट मंटिसा)
  4. स्पष्ट कास्टिंग का उपयोग करें: (float)i या (int)f

IEEE 754 प्रतिनिधित्व

float (32-बिट):  1 साइन | 8 एक्सपोनेंट | 23 मंटिसा
double (64-बिट): 1 साइन | 11 एक्सपोनेंट | 52 मंटिसा

पूर्णांक परिशुद्धता सीमा:
float:  ±16,777,216 (2^24) तक सटीक
double: ±9,007,199,254,740,992 (2^53) तक सटीक
  1. - C/C++ में float और double तुलना का सबसे प्रभावी तरीका क्या है?

    यहां हम देखेंगे कि C या C++ का उपयोग करके दो फ्लोटिंग पॉइंट डेटा या दो डबल डेटा की तुलना कैसे की जाए। फ्लोटिंग पॉइंट / डबल तुलना पूर्णांक तुलना के समान नहीं है। दो फ्लोटिंग पॉइंट या डबल मानों की तुलना करने के लिए, हमें तुलना में सटीकता (precision) को ध्यान में रखना होगा। उदाहरण के लिए, यदि दो संख्य

  1. - C++ में float और double की तुलना कैसे करें?

    float और double वेरिएबल्स की तुलना इस बात पर निर्भर करती है कि आपका अंतिम लक्ष्य क्या है। यदि आप बहुत अधिक विवरण में जाए बिना एक रन करने योग्य फ़ंक्शन चाहते हैं और कुछ गलत गणनाओं में कोई समस्या नहीं होगी, तो आप निम्न फ़ंक्शन का उपयोग कर सकते हैं: उदाहरण #include<iostream> using namespace std

  1. - C++ में रिलेशनल और तुलना ऑपरेटर्स

    C प्रोग्रामिंग में, 2 वेरिएबल्स में रखे गए मानों की तुलना निम्न ऑपरेटर्स का उपयोग करके की जा सकती है और उनके बीच संबंध निर्धारित किया जाएगा। इन ऑपरेटर्स को रिलेशनल ऑपरेटर्स कहा जाता है। विभिन्न C++ रिलेशनल ऑपरेटर्स उपलब्ध हैं: ऑपरेटर्स विवरण > ग्रेटर दैन >= ग्रेटर दैन या बराबर == ब