2010-03-27 15 views
22

limits.h गैर-फ़्लोटिंग पॉइंट गणित प्रकारों के लिए सीमा निर्दिष्ट करता है, उदा। INT_MIN और INT_MAX। ये मान सबसे नकारात्मक और सबसे सकारात्मक मान हैं जिन्हें आप int का उपयोग करके प्रस्तुत कर सकते हैं।FLT_MIN शून्य के बराबर क्यों है?

float.h में, FLT_MIN और FLT_MAX के लिए परिभाषाएं हैं। यदि आप करते हैं निम्नलिखित:

NSLog(@"%f %f", FLT_MIN, FLT_MAX); 

आप निम्न आउटपुट प्राप्त:

FLT_MIN = 0.000000, FLT_MAX = 340282346638528859811704183484516925440.000000 

FLT_MAX, एक बहुत बड़ी संख्या के बराबर है के रूप में आप उम्मीद करेंगे, लेकिन क्यों वास्तव में एक की FLT_MIN शून्य के बराबर बजाय करता है बड़ी नकारात्मक संख्या?

+1

मेरी मशीन पर 'FLT_MIN'' 1.17549435e-38F' है। –

+2

आप मूल्य की जांच कैसे कर रहे हैं? कहीं हेडर फ़ाइल में देख रहे हैं? एक printf का उपयोग कर? (यदि आप printf का उपयोग कर रहे हैं, तो आप "% f" का उपयोग नहीं कर रहे हैं, है ना? आप घातीय नोटेशन प्राप्त करने के लिए "% e" चाहते हैं।) – Cascabel

+0

मैंने% f को स्पष्ट करने के लिए क्यू और ए दोनों को अपडेट किया है printf मुद्दा। –

उत्तर

49

यह वास्तव में शून्य नहीं है, लेकिन यदि आप का उपयोग कर printf या NSLog का उपयोग करके इसका निरीक्षण करते हैं तो यह शून्य की तरह लग सकता है।

/* Minimum normalized positive floating-point number, b**(emin - 1). */ 

नोट सकारात्मक कि वाक्य में:
float.h के अनुसार (मैक ओएस एक्स 10.6.2 में कम से कम), FLT_MIN रूप में वर्णित है की तुलना में (सामान्यीकृत) संख्या FLT_MIN न्यूनतम को संदर्भित करता है अधिक से अधिक शून्य। (बहुत छोटी गैर-सामान्यीकृत संख्याएं हैं)।

यदि आप न्यूनतम फ़्लोटिंग पॉइंट नंबर (ऋणात्मक संख्या सहित) चाहते हैं, तो -FLT_MAX का उपयोग करें।

+0

यह मेरे जवाब का भी प्रतीत नहीं होता - मैंने सोचा कि आपका प्रश्न यह था कि यह बहुत छोटा और सकारात्मक कुछ के बजाय शून्य क्यों है। – Cascabel

+0

यह तर्क दिया जा सकता है कि 0 सख्ती से सकारात्मक नहीं है, और यह मान 1.4e-45 होना चाहिए या जो कुछ भी नीचे प्रवाह से पहले सही है। –

+0

@Ignacio: हाँ, यह बात है, है ना? – Cascabel

11

'% f' प्रारूप निश्चित प्रारूप में 6 दशमलव स्थान प्रिंट करता है। चूंकि FLT_MIN बहुत छोटा है, यह निश्चित बिंदु में शून्य की तरह दिखता है। यदि आप '% e' या '% g' प्रारूप का उपयोग करते हैं, तो आपको एक बेहतर स्वरूपित उत्तर मिलेगा। इसी प्रकार FLT_MAX के साथ।

#include <float.h> 
#include <stdio.h> 
int main(void) 
{ 
    printf("MIN = %f, MAX = %f\n", FLT_MIN, FLT_MAX); 
    printf("MIN = %e, MAX = %e\n", FLT_MIN, FLT_MAX); 
    return(0); 
} 


MIN = 0.000000, MAX = 340282346638528859811704183484516925440.000000 
MIN = 1.175494e-38, MAX = 3.402823e+38 
संबंधित मुद्दे