gpt4 book ai didi

C - 小数字的浮点舍入

转载 作者:太空宇宙 更新时间:2023-11-04 05:49:56 25 4
gpt4 key购买 nike

在 Intel(R) Core(TM) i7-4790 上运行这段代码,我得到了奇怪的结果:

#include <stdio.h>
#define CALCULUS 2052 - 1.0 - margin
void main(void)
{
float margin = 1.0001;
float a = CALCULUS;
printf("%2.6f\t%2.6f\n", a, CALCULUS);
}

我有

$ gcc test2.c && ./a.out
2050.000000 2049.999900

有人可以解释这种行为吗?我知道当我使用 double 而不是 float 时不会发生这种情况,但我发现舍入发生在如此小的数字上令人惊讶。

最佳答案

float a = CALCULUS;

存储在a中的值当然是 32 位单精度浮点值。 CALCULUS 的结果扩展由 double 转换而来到 floata 的初始化中.

但是当你通过 CALCULUS 的扩展时直接到printf这是一个double传递的值。

简而言之,2052 - 1.0 - margin的结果是 double .

关于C - 小数字的浮点舍入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44830201/

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