gpt4 book ai didi

c - 在 C 中 float 或 double 类型到底如何工作?

转载 作者:行者123 更新时间:2023-11-30 20:11:37 25 4
gpt4 key购买 nike

现在我在大学学习C。我发现 float 类型出现意外行为。

这是示例代码:

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

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

  • 33.33333200000000000000(四舍五入)

最多

  • 33.33333400000000000000(向上舍入)
  • 33.33333200000000000000(向下舍入)
  • 33.33333000000000000000(刚刚截断)

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

2后面的数字(061767578)在我看来无法解释。

为什么会出现这种行为?我搜索了很多,但什么也没找到:(

最佳答案

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

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

关于c - 在 C 中 float 或 double 类型到底如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40055472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com