gpt4 book ai didi

c++ - 如果我试图用另一种语言复制一个程序。使用更高的精度是不明智的吗?

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

我正在将程序从 Scilab 代码转换为 C++,维护 Scilab 生成的结果对我来说至关重要。

我知道 Scilab 使用 IEEE 754 double 并且 C++ double (虽然不是必需的)以类似的方式实现。

如果我试图与 Scilab 的结果完全匹配,那么在 C++ 中使用更高的精度(例如 long double)是不是一个坏主意?

例如: Scilab 是否有可能将一个数字计算为 0.1234,而在 C++ 中使用长 double 则为 0.12345。因此可能会产生差异,导致两个程序产生不同结果(尽管在 C++ 中更准确)。

最佳答案

是的,这完全有可能。

但由于 float 永远不会完全精确,因此您在设计算法时应牢记这一点,并尽量避免这些“舍入误差”在一段时间后影响您的计算。

更重要的是,正如评论中已经指出的那样:不要指望您的 C++ 程序产生与 Scilab 程序完全相同的结果,尤其是当它对小的更改至关重要时。这就是为什么大多数数值模拟在开始产生“错误”结果之前只能精确到某个限度。

为了给你一些有用的建议,C++ 有一个非常有用的选项 typedefs。使用类似 typedef long double myFloatType 的 typedef 并且只使用 myFloatType 进行计算(想想一个更好的名字,它实际上告诉了更多关于它在这里的用途!)。然后您可以轻松更改它,只需更改一行代码,然后比较结果。

如果差异很大,可能值得考虑更好的算法。

关于c++ - 如果我试图用另一种语言复制一个程序。使用更高的精度是不明智的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37929420/

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