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

C कंपाइलर में फ्लोट कैसे स्टोर होते हैं?

C प्रोग्रामिंग भाषा में, float फ्लोटिंग पॉइंट का संक्षिप्त रूप है।

  • फ्लोटिंग पॉइंट संख्याएं आमतौर पर IEEE 754 फॉर्मेट (इंस्टीट्यूट ऑफ इलेक्ट्रिकल एंड इलेक्ट्रॉनिक्स इंजीनियर्स) में दर्शाई जाती हैं।
  • IEEE फॉर्मेट एक साइन बिट, एक मैंटिसा (मैट्रिक्स/सिग्निफिकेंड), और एक एक्सपोनेंट (2 की घात के लिए) का उपयोग करता है।
  • साइन बिट संख्या का चिह्न दर्शाता है: 0 = धनात्मक, 1 = ऋणात्मक।
  • मैंटिसा बाइनरी में निरूपित होती है, सामान्यीकृत (normalized) रूप में परिवर्तित होने के बाद। सामान्यीकरण के बाद, सबसे महत्वपूर्ण अंक हमेशा 1 होता है (इम्प्लिसिट/हिडन बिट)।
  • एक्सपोनेंट एक इंटीजर है जो अनसाइन्ड बाइनरी फॉर्मेट में संग्रहीत होता है, एक धनात्मक इंटीजर बायस जोड़ने के बाद।
  • यह सुनिश्चित करता है कि संग्रहीत एक्सपोनेंट हमेशा धनात्मक हो।
  • float (32-बिट) के लिए, बायस 127 है। double (64-बिट) के लिए, बायस 1023 है।

IEEE 754 सिंगल प्रिसिजन (float, 32-बिट) लेआउट

| S (1 bit) | Exponent (8 bits) | Mantissa (23 bits) |
|    31     |      30 - 23      |      22 - 0        |
  • मान = (-1)^S × 1.M × 2^(E-127)
  • विशेष मान: E=0 (डीनॉर्मलाइज़्ड/शून्य), E=255 (इन्फिनिटी/NaN)

उदाहरण: 37.66666 को 4 दशमलव स्थानों तक राउंड करना

#include <stdio.h> 

int main() {
    float var = 37.66666f;
    printf("%.4f\n", var);  // 4 दशमलव स्थानों तक राउंडिंग
    return 0;
}

आउटपुट

37.6667

उदाहरण: 8 दशमलव स्थानों तक (फ्लोट प्रिसिजन सीमा दिखाता है)

#include <stdio.h> 

int main() {
    float var = 78.67f;
    printf("%.8f\n", var);
    return 0;
}

आउटपुट

78.66999817

व्याख्या: 78.67 को बाइनरी में सटीक रूप से दर्शाया नहीं जा सकता। फ्लोट में ~7 दशमलव अंकों की प्रिसिजन होती है, इसलिए 8वें स्थान पर राउंडिंग आर्टिफैक्ट्स दिखाई देते हैं।

IEEE 754 प्रतिनिधित्व उदाहरण

37.66666 का प्रतिनिधित्व:

37.66666 = 100101.101010101010101... (बाइनरी)
Normalized: 1.00101101010101010101010 × 2^5
Sign: 0
Exponent: 5 + 127 = 132 = 10000100 (बाइनरी)
Mantissa: 00101101010101010101010 (23 बिट्स)
Hex: 0x4215AAAA

Float vs Double प्रिसिजन

प्रकारआकारप्रिसिजन (दशमलव अंक)एक्सपोनेंट रेंजबायस
float4 बाइट्स (32-बिट)~6-7±3.4×10^38127
double8 बाइट्स (64-बिट)~15-16±1.7×10^3081023
long double16 बाइट्स (आमतौर पर 80-बिट एक्सटेंडेड)~18-19±1.1×10^493216383

सामान्य समस्याएं

  • फ्लोटिंग पॉइंट तुलना: if(a == b) के बजाय if(fabs(a-b) < epsilon) उपयोग करें।
  • धन संचालन: फ्लोट का उपयोग न करें; इंटीजर सेंट्स या डेसिमल लाइब्रेरी उपयोग करें।
  • संचय त्रुटि: लूप में बार-बार जोड़ने से त्रुटि जमा होती है (Kahan समेशन उपयोग करें)।
  1. C प्रोग्राम कैसे निष्पादित होता है (कंपाइलेशन प्रक्रिया) C प्रोग्राम कैसे निष्पादित होता है (कंपाइलेशन प्रक्रिया)

    C प्रोग्राम सोर्स कोड से एक्जीक्यूटेबल बनने तक चार मुख्य चरणों से गुजरता है। कंपाइलेशन पाइपलाइन Source Code (.c) │ ▼ Preprocessor (cpp) → Expanded Source (.i) │ ▼ Compiler (cc1) → Assembly (.s) │ ▼ Assembler (as) → Object Code (.o / .obj) │ ▼ Linker (ld) → Executabl

  1. Python में कितने क्यूब कटे हैं, यह खोजने का प्रोग्राम Python में कितने क्यूब कटे हैं, यह खोजने का प्रोग्राम

    मान लीजिए, a, b, और c आयामों के कई क्यूब्स हैं, और उनका उपयोग करके axbxc आयाम का एक नया बॉक्स बनाया जाता है। a, b, और c pairwise को-प्राइम हैं; gcd(a, b) = gcd(b,c) = gcd(c, a) = 1। हमें एक सिंगल स्लाइस के साथ बॉक्स को दो टुकड़ों में काटना है जैसा कि चित्र में दिखाया गया है। हमें यह पता करना है कि य

  1. Python Program कैसे चलाएं? Python Program कैसे चलाएं?

    Code लिखने के बाद, हमें code को execute करके output प्राप्त करने के लिए run करने की आवश्यकता होती है। Program चलाने पर, हम जांच सकते हैं कि लिखा गया code सही है और desired output produce करता है। Python program चलाना काफी आसान काम है। IDLE पर चलाएं IDLE पर python program चलाने के लिए, दिए गए steps क