注册 登录
编程论坛 VC++/MFC

VC++6.0 非常诡异的数值精度问题

md00000000 发布于 2022-08-13 01:04, 1594 次点击
VC++6.0运行以下代码
程序代码:

float sum = 0;
for (int i = 0; i < 10000000; i++) {
    sum += (float)i;
}
printf("%f \n", sum);
printf("%d \n", sizeof(sum));

结果:

49999995000000.000000
4


把倒数两行互换一下
结果还会不一样

然而gcc和clang的结果均为:48714878025728.000000 (不管优化开了几档)

同样是float,怎么上世纪的东西精度还更高
3 回复
#2
md000000002022-08-13 23:06
应该是老编译器优化策略问题,这个问题太过无趣了
#3
apull2022-08-13 23:29
试试,记得改输出
double sum = 0;
#4
mature1192022-09-03 19:53
double精度更高吧?
1