gpt4 book ai didi

c++ - 两个数相减时的小数

转载 作者:行者123 更新时间:2023-11-28 05:55:33 26 4
gpt4 key购买 nike

在我的程序中,我有这样的计算

a = a * b * c; 

d = f * b* c; // here f and a are same value

d = d - a;

当我打印 d 的值时,我得到了以下结果:

-1.95399e-14

所以我在 cout 中使用 fixed 设置精度并打印变量。

结果是:

-0.00000000000001954

我希望在表达式 d = d - a;

之前打印 d 和 a 的值

所以我改变了我的代码,

cout<< d << endl;

cout<< a << endl;

当我包含上面两行时,该表达式后面的变量'd'的结果正好是'0'

如果我没有打印变量 'd' 和 'a' 的值,它给出的结果为 -1.95399e-14;

在这两种情况下,我都希望结果为“0”。我怎样才能做到这一点?这个 cout 语句在做什么?

最佳答案

由于 float 通常无法准确存储,因此在对它们进行计算的任何结果中都包含非常小的错误。与优化器结合使用时,您会得到一些令人费解的结果,您的情况就是这样。

在第一种情况下,编译器将 ad 的结果保存在 FPU 寄存器中,这(在 x86 上,在 32 位代码中)比一个双。然后减去这些 long double 值,给你一个细微的差别。当您添加 cout 调用时,ad 值被写入内存(都四舍五入到相同的数字),然后读回 FPU 寄存器以执行减法,结果为零。

关于c++ - 两个数相减时的小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34236915/

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