在 C 中,float 或 double 类型是如何工作的?

In C how float or double type works exactly?

现在大学在学C。我在 float 类型中发现了意外行为。

这是示例代码:

#include <stdio.h>
int main(void) {
    float f = 100.0/3;
    printf("%.20f", f);
}

真实结果是 33.3(有 3 个周期)。我也知道机器只能存储有理数,对我来说没问题,所以我预期的答案可能是:

最多

但是执行后(用GCC编译)结果是33.33333206176757800000...

2后面的数字(061767578)我脑子里想不通

为什么会出现这种行为?我搜索了很多,我一无所获:(

要查看存储的确切值,您应该打印 20 多位数字。该数字应以 75000…25000….

结尾

假设您正在使用 IEEE 754 的实现,每个 float 的形式为 num / den,其中 num 有 24 个二进制 (!) 数字和 den是 2 的幂。(非规范化数字除外,但那是另一个话题。)