我正在开发一个执行大量浮点计算的应用程序。我们在 Intel x86 上使用具有双精度浮点值的 VC++。我们声称我们的计算精确到n 个十进制数字(现在是 7,但试图声称是 15)。
当我们的结果略有变化时(由于代码重构、清理等),我们会付出很多努力来对照其他来源验证我们的结果。我知道影响整体精度的因素很多,例如 FPU 控制状态、编译器/优化器、浮点模型以及操作本身的整体顺序(即算法本身),但考虑到固有的不确定性在 FP 计算中(例如,不能表示 0.1),为所有计算声明任何特定程度的精度似乎是无效的。
我的问题是:在不进行任何类型的分析(例如区间分析)的情况下,对 FP 计算的准确性做出任何声明是否有效?如果是这样,可以提出什么索赔,为什么?
编辑:
因此,假设输入数据精确到小数点后n位,那么在使用双精度的情况下,是否可以对任意计算的结果做出任何保证?例如,如果输入数据有 8 位有效十进制数字,则输出将至少有 5 位有效十进制数字... ?
我们正在使用数学库,并且不知道他们可能会或可能不会做出任何保证。我们使用的算法不一定以任何方式进行精确分析。但是即使给定一个特定的算法,实现也会影响结果(例如,只是改变两个加法运算的顺序)。使用双精度时是否有任何内在保证?
另一个编辑:
我们确实根据其他来源凭经验验证了我们的结果。那么,当我们达到 10 位数的准确度时,我们只是幸运吗?