gpt4 book ai didi

c - 为什么 float 相乘没有错误?

转载 作者:行者123 更新时间:2023-12-02 00:00:34 27 4
gpt4 key购买 nike

我需要一些关于 float 学的澄清。

为了学习目的,我写了一些代码:

#include "stdio.h"

int main (int argc, char const *argv[])
{
int i;
double a=1.0/10.0;
double sum=0;

for(i = 0; i < 10; ++i)
sum+=a;

printf("%.17G\n", 10*a );
printf("%d\n", (10*a == 1.0) );

printf("%.17G\n", sum );
printf("%d\n", (sum == 1.0) );

return 0;
}

它给出的输出是:

    1
1
0.99999999999999989
0

为什么 (sum == 1.0) - is false 是很容易理解的,但为什么乘法给出正确答案而没有错误?

谢谢。

最佳答案

如果您查看实际生成的汇编语言,您会发现编译器没有生成您要求的单一乘法。相反,它只是提供实际值。如果您关闭优化,您可能会得到您期望的结果(除非您的编译器无论如何都会对此进行优化)。

关于c - 为什么 float 相乘没有错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21654098/

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