答案 0 :(得分:3)
浮点精度指的是前导重要位数。
回想一下,浮点数是以对数方式分布的。 FP值从0.1到0.2在10到20之间,在0.000001到0.000002之间,在1,000,000到2,000,000之间。
请注意,下一个FP编号的数字会在最右边的数字中稍微改变一下。
printf("FLT_MIN %.*e\n", FLT_DECIMAL_DIG - 1, FLT_MIN);
printf("FLT_MIN+ %.*e\n", FLT_DECIMAL_DIG - 1, nextafterf(FLT_MIN, 1.0));
printf("one %.*e\n", FLT_DECIMAL_DIG - 1, 1.0);
printf("one+ %.*e\n", FLT_DECIMAL_DIG - 1, nextafterf(1.0, 2.0));
printf("FLT_MIN- %.*e\n", FLT_DECIMAL_DIG - 1, nextafterf(FLT_MAX, 1.0));
printf("FLT_MAX %.*e\n", FLT_DECIMAL_DIG - 1, FLT_MAX);
输出
FLT_MIN 1.17549435e-38
FLT_MIN+ 1.17549449e-38
one 1.00000000e+00
one+ 1.00000012e+00
FLT_MAX- 3.40282326e+38
FLT_MAX 3.40282347e+38
两个连续FP编号之间的差异通常称为单位 - (in-the)-last-place ULP。与“精确度”的数字相比,正是这种差异。 binary32的这个差异对于每个2的幂是恒定的,然后它随着2的幂增加而翻倍。
请注意,1.0以上的连续float
数字的差异为2 -23 或1.0 / 8,388,608或0.000000119...
。这是FLT_EPSILON
的定义。有人认为是“精确”。 C指定 most 这可以是1E-5
或1中100,000。
C并未指定float
的行为与常用的binary32完全相同,因此需要进行一些修改。
答案 1 :(得分:0)
简短的回答,浮点数使用指数来表示数字,而不是像整数那样2的恭维。 user3386109的链接解释了它,但here is a link to an interactive app让你看到每个位如何影响最终结果。我认为你玩弄它将不仅仅是解释或链接到维基百科页面。
答案 2 :(得分:0)
计算机使用科学计数法存储浮点值。 如果浮点值为293.990933,则科学计数法为0.293990933 * 10 ^ 3
这里有0个符号位
293990933被称为螳螂
3称为指数
保留:对于符号位1二进制数字。 对于螳螂,它可以有24位,其余32位用于指数!
默认情况下,当您使用%f时,它会返回数字的6分之一!