gpt4 book ai didi

简单算术的 C++ 和 Octave 结果不同

转载 作者:行者123 更新时间:2023-11-30 00:49:58 25 4
gpt4 key购买 nike

我有一个 C++ 代码和一个 Octave,它们都计算相同的方程

在 C++ 中

#include <math.h>
int main()
{
float x = 1.5f;
float y = pow(x, 6) * 235809835.41f - pow(x, 5) * 2110439254.2f + pow(x, 4) *7869448124.8f - pow(x, 3) * 15648965509.0f + pow(x, 2) * 17503313074.0f - (x)* 10440563329.0f + 2594694745.0f; // result y = 3584
return 0;
}

Octave 音阶

x = 1.5
y = (x ^ 6) * 235809835.41 - (x ^ 5) * 2110439254.2 + (x ^ 4) *7869448124.8 - (x ^ 3) * 15648965509 + (x ^ 2) * 17503313074 - (x)* 10440563329 + 2594694745‏ // result y = 26

在这两种情况下,y 的计算值不同。 C++ 计算 y 为 3584 而 Octave 计算 y 为 26。造成这种差异的原因可能是什么?

编辑:Excel 产生与 Octave 相同的结果,并且结果在等式的上下文中也是合乎逻辑的。所以,C++ 代码或编译器有问题。

最佳答案

这似乎是由于 float 类型的精度有限,这很可能导致其中一个操作被有效丢弃,因为一个操作数比另一个操作数小到足以导致结果的显着变化。 (请参阅 this extremely contrived example,它显示了这可能是什么样子。)

如果您重写代码以使用更精确的double 类型,则the result is 26.810783 ,这与我在 Maxima 中计算公式得到的结果相匹配。

进一步阅读:What Every Computer Scientist Should Know About Floating-Point Arithmetic

关于简单算术的 C++ 和 Octave 结果不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26552633/

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