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

If I'm trying to replicate a program in another language. Is it unwise to use more precision?

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

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

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

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

是的,这完全有可能。

但是由于浮点数永远不会完全精确,因此您在设计算法时应牢记这一点,并尽量避免那些 "rounding errors" 在一段时间后搞砸您的计算。

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

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

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