gpt4 book ai didi

c - GCC编译时分错误

转载 作者:行者123 更新时间:2023-12-04 10:32:42 25 4
gpt4 key购买 nike

有人可以解释这种行为吗?

测试.c:

#include <stdio.h>

int main(void)
{
printf("%d, %d\n", (int) (300.6000/0.05000), (int) (300.65000/0.05000));
printf("%f, %f\n", (300.6000/0.05000), (300.65000/0.05000));
return 0;
}

$ gcc 测试.c

$ ./a.out
6012, 6012
6012.000000, 6013.000000

我检查了汇编代码,它把第一个 printf 的两个参数都作为 6012,所以这似乎是一个编译时错误。

最佳答案

运行

#include <stdio.h>

int main(void)
{
printf("%d, %d\n", (int) (300.6000/0.05000), (int) (300.65000/0.05000));
printf("%.20f %.20f\n", (300.6000/0.05000), (300.65000/0.05000));
return 0;
}

而且应该更清楚。第二个值(在浮点除法之后,不精确)是 ~6012.9999999999991,所以当你用 (int) 截断它时,gcc 足够聪明,可以在编译时输入 6012。

当您打印 float 时,默认情况下 printf 将它们格式化为仅以 6 位精度显示,这意味着第二个打印为 6013.000000。

关于c - GCC编译时分错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2963335/

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