为什么FLT_MIN等于零?
limits.h
指定非浮点数学类型的限制,例如INT_MIN
和INT_MAX
。 这些值是您可以使用int表示的最负面和最正面的值。
在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
等于零而不是一个非常大的负数?
它实际上并不为零,但如果使用%f
检查使用printf
或NSLog
,它可能看起来为零。
根据float.h
(至少在Mac OS X 10.6.2中), FLT_MIN
被描述为:
/* Minimum normalized positive floating-point number, b**(emin - 1). */
注意该句中的正数 : FLT_MIN
指的是大于零的最小(标准化)数。 (有非常小的非标准化数字)。
如果您想要最小浮点数(包括负数),请使用-FLT_MAX
。
‘%f’格式以固定格式打印6个小数位。 由于FLT_MIN要小得多,因此在固定点看起来像零。 如果您使用’%e’或’%g’格式,您将获得更好的格式化答案。 与FLT_MAX类似。
#include #include 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