现在我在大学学习C语言。我发现了一个浮动类型的意外行为。在C中,float或double类型是如何工作的?
这是示例代码:
#include <stdio.h>
int main(void) {
float f = 100.0/3;
printf("%.20f", f);
}
真正结果是33.3(用3周期的)。我也知道,机器只能存储有理数对我来说是好的,所以我预计answars可能是:
- 33.33333 00000000000000(只是四舍五入)
最多
- 33.33333 00000000000000(四舍五入)
- 33.33333 00000000000000(四舍五入)
- 33.33333 00000000000000(只截断)
但执行(使用GCC编译)后的结果为33.333332 00000 ...
的数字( )2之后无法在我脑海中解释。
为什么会这样?我搜索了很多,我什么也没找到:(
[IEEE 754](HTTPS ://en.wikipedia.org/wiki/IEEE_floating_point) – tkausl
这是最接近的数字33.3(循环),可以表示在f游荡点格式。舍入发生在二进制中,而不是十进制,因此舍入将不对应于十进制表示中的单个最终数字。 – samgak
@ShadowRanger OP在哪里指定了754?标签不应该在那里。 – 2501