gpt4 book ai didi

c - 为什么我的 float 相差 0.00390625?

转载 作者:太空宇宙 更新时间:2023-11-04 00:13:12 27 4
gpt4 key购买 nike

float a=67107842,b=512;
float c=a/b;
printf("%lf\n",c);

为什么 c 是 131070.000000 而不是正确的值 131070.00390625?

最佳答案

您的编译器的 float 类型可能正在使用 32 位 IEEE 754 单精度格式。

67107842是一个26位的二进制数:

  11111111111111110000000010

单精度格式将大多数数字表示为 1.x 乘以一些(正或负)2 的幂,其中 23 位存储在二进制位置之后,前导 1. 被暗示(非常小的数字是一个异常(exception))。

但是 67107842 需要二进制位后的 24 位(表示为 1.111111111111111000000001 乘以 225)。由于只有 23 位的空间,所以最后的 1 丢失了。所以在这种情况下,错误的是 a 中的值,而不是除法 - a 实际上包含 67107840 (11111111111111110000000000),这正是131070 * 512。

如果你也打印 a 就可以看到:

printf("%lf %lf %lf\n", a, b, c);

给予

67107840.000000 512.000000 131070.000000

关于c - 为什么我的 float 相差 0.00390625?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5523446/

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