为什么FLT_MIN等于零?

limits.h指定非浮点数学类型的限制,例如INT_MININT_MAX 。 这些值是您可以使用int表示的最负面和最正面的值。

float.h ,有FLT_MINFLT_MAX定义。 如果您执行以下操作:

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

您将获得以下输出:

 FLT_MIN = 0.000000, FLT_MAX = 340282346638528859811704183484516925440.000000 

正如您所料, FLT_MAX等于一个非常大的数字,但为什么FLT_MIN等于零而不是一个非常大的负数?

它实际上并不为零,但如果使用%f检查使用printfNSLog ,它可能看起来为零。
根据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