在 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).