现在我在大学学习C语言。我在浮点类型中输入了一个意外的行为。
这是示例代码:
#include <stdio.h>
int main(void) {
float f = 100.0/3;
printf("%.20f", f);
}
真实的结果是33.3(有3个周期)。我也知道机器只能存储有理数的数字,对我来说还可以,所以我预期的答案可能是:
最多
但在执行(用GCC编译)后,结果是33.333332 061767578 00000 ...
2之后的数字( 061767578 )无法在我的脑海中解释。
为什么会这样?我搜索了很多,我一无所获:(
答案 0 :(得分:2)
要查看存储的确切值,您应该打印超过20位数字。该号码应以75000…
或25000…
结尾。
假设您使用的是IEEE 754的实现,每个float
的格式为num / den
,其中num
有24个二进制(!)数字,den
是2.除了非规范化数字,但这是另一个主题。)