在 C++ 中浮动比 IEEE 754 更小的范围
Float in c++ smaller range than IEEE 754
我尝试做如下划分:1/16777216
,什么等于5.96046448e-8
但是这个:
printf("number: %f \n", 1.0f / 16777216.0f);
总是给我 0.00000
而不是我期望的答案。
我查了一下范围,因为我想得很好,这可能是浮动太小的问题
处理这样的数字,但 IEEE 754 声明它是 ±1.18×10−38
.
我是不是遗漏了什么,这就是为什么结果不是预期的?
使用固定格式 (%f
) 时,您会得到一个带有小数点且最多 6 位数字的格式。由于您使用的值四舍五入到小于 0.000001
的值,因此打印 0.000000
似乎是合理的。您可以使用更多数字(我 认为 使用 %.10f
但我不太擅长 <stdio.h>
格式说明符)或者您更改格式以使用科学符号 (%e
) 或两个选项的 "better" (%g
).
我尝试做如下划分:1/16777216
,什么等于5.96046448e-8
但是这个:
printf("number: %f \n", 1.0f / 16777216.0f);
总是给我 0.00000
而不是我期望的答案。
我查了一下范围,因为我想得很好,这可能是浮动太小的问题
处理这样的数字,但 IEEE 754 声明它是 ±1.18×10−38
.
我是不是遗漏了什么,这就是为什么结果不是预期的?
使用固定格式 (%f
) 时,您会得到一个带有小数点且最多 6 位数字的格式。由于您使用的值四舍五入到小于 0.000001
的值,因此打印 0.000000
似乎是合理的。您可以使用更多数字(我 认为 使用 %.10f
但我不太擅长 <stdio.h>
格式说明符)或者您更改格式以使用科学符号 (%e
) 或两个选项的 "better" (%g
).