【发布时间】:2016-10-06 15:34:36
【问题描述】:
我正在将程序从Scilab(类似于 Matlab)转换为 C++,并且我需要保持与之前代码保持的相同级别的精度。
注意:尽管保持相同水平的精度是理想的。如果完成的结果有一些错误,这是可以接受的。我面临的问题(如下所示)是由于循环造成的,因此计算错误会很快复合。但如果最终结果仅相差千分之一左右(例如 1/1000 与 1/1001),那将不是问题。
我已经简要研究了许多不同的方法来做到这一点,包括:
Int vs Float 示例: 不要使用浮点数 12.45,而是将其存储为整数 124,500。然后在适当的时候简单地将所有内容转换回来。注意:我不确定这将如何与我正在使用的代码一起工作(下面有更多详细信息)。
我的程序如何产生错误结果的示例:
for (int i = 0; i <= 1000; i++)
{
for (int j = 0; j <= 10000; j++)
{
// This calculation will be computed with less precision than in Scilab
float1 = (1.0 / 100000.0);
// The above error of float2 will become significant by the end of the loop
float2 = (float1 + float2);
}
}
我的问题是:
是否有一种普遍接受的方法来保持浮点运算的准确性,或者上述方法之一是否足够?
【问题讨论】:
-
您应该编辑您的问题以提供更多独立的代码示例,而不是仅提供链接。
-
我必须先点击您的链接(实际上我没有)才能了解您所询问的内容,这非常烦人。请在您的问题中提供minimal reproducible example。
-
您需要多少精度?