0

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

我知道 Scilab 使用 IEEE 754 双精度,并且 C++ 双精度(尽管不是必需的)以类似的方式实现。

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

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

4

1 回答 1

1

是的,这是完全可能的。

但是由于浮点数永远不会完全精确,因此您应该在设计算法时考虑到这一点,并尽量避免那些“舍入误差”在一段时间后破坏您的计算。

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

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

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

于 2016-06-20T18:56:13.743 回答