gpt4 book ai didi

c++ 和 matlab 浮点计算

转载 作者:行者123 更新时间:2023-11-28 08:01:05 25 4
gpt4 key购买 nike

有人能告诉我 c++ 和 matlab 是否使用相同的浮点计算实现吗?我会在 C++ 中获得与在 Matlab 中相同的值吗?

目前我在将我的 Matlab 代码翻译成 C++ 时遇到了这些差异:

Matlab: R = 1.0000000001623, I = -3.07178893432791e-010, C = -3.79693498864242e-011

C++: R = 1.00000000340128 I = -3.96890964537988e-009 Z = 2.66864907949582e-009

如果不是,有什么区别,我在哪里可以找到更多关于浮点计算实现的信息?

谢谢!

最佳答案

虽然不清楚您的数字实际是多少,但第一个(也是最大的)数字的相对差异约为 1e-8,这是许多 double 算法的相对容差。

float 只是实数系统的近似值,它们的有限大小( double 为 64 位)限制了它们的精度。由于这种有限的精度,涉及 float 的运算可能会产生舍入误差,因此不是严格结合的。这意味着 A+(B+C) != (A+B)+C。两者之间的差异通常很小,具体取决于它们的相对大小,但并不总是零。

这意味着当您比较用 Matlab 编写的算法与用 C++ 编写的算法时,您应该预计到相对值和绝对值会有微小差异。不同之处可能在于库(即,不能保证 Matlab 将系统数学库用于例程,如 sqrt),或者可能只是您的 C++ 和 Matlab 实现以不同方式排序它们的操作。

关于 floating point comparison tests 的部分在 Boost::Test 中对此进行了一些讨论,并提供了一些很好的引用。特别是,您可能应该阅读 What Every Computer Scientist Should Know About Floating-Point Arithmetic并考虑购买一份 Knuth 的 TAOCP Vol. II .

关于c++ 和 matlab 浮点计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11460693/

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