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
等于零而不是一个非常大的负数呢?
发布于 2010-03-27 11:30:53
它实际上不是零,但如果您使用printf
或NSLog
通过%f
检查它,它可能看起来像零。
根据float.h
(至少在MacOSX10.6.2中),FLT_MIN
被描述为:
/* Minimum normalized positive floating-point number, b**(emin - 1). */
注意这句话中的正数:FLT_MIN
指的是大于零的最小(规范化)数字。(存在小得多的非规范化数字)。
如果需要最小浮点数(包括负数),请使用-FLT_MAX
。
发布于 2010-03-27 11:45:31
'%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
发布于 2019-05-04 01:13:18
每当您尝试打印标准头文件FLT_MIN的值时,都会得到0.000000(正如您在输出屏幕中看到的那样)。这实际上并不是一个错误。之所以会得到这个结果,是因为格式说明符%f。通常情况下,%f会在小数点后打印6位数字,但在这种情况下,带符号的负值非常小,因此您需要在小数点后打印大量数字。
我已经使用%.54f(与机器相关)来获取我的系统所需的- result(0.000000000000000000000000000000000000011754943508222875 )。
//在您的系统上检查
#include<stdio.h>
#include<float.h>
int main()
{
printf("Minimum signed float %.55f\n",FLT_MIN);
printf("Minimum signed float %e\n",FLT_MIN);
return 0;
}
//输出:-
//最小有符号浮点数0.0000000000000000000000000000000000000117549435082228750
//最小带符号浮点数1.175494e-038
我认为现在你已经很清楚为什么CHAR_MIN会得到0.000000,以及如何在相同格式的specifier.Though中获得正确的结果,你可以使用%e来获得更好的格式化结果。
https://stackoverflow.com/questions/2528039
复制相似问题