0

如何确保函数在 C/C++ 中返回一致的浮点值?

我的意思是:如果ab是浮点类型,如果我写了一个多项式函数(它接受浮点参数并返回浮点结果),让我们调用它polyfun(),编译器是否可以确保:

如果a==b, 那么polyfun(a)==polyfun(b), 这意味着数学运算/四舍五入的顺序在运行时是一致的吗?

4

2 回答 2

3

语言标准不保证可重现的结果。通常,允许 C 实现以比标称类型更高的精度评估浮点表达式。它可能会以不可预知的方式这样做,例如在一个地方而不是另一个地方内联函数调用,或者在两个地方内联函数调用,但在一个地方,将结果缩小到名义类型以将其保存在堆栈中,然后再检索将其与另一个值进行比较。

这个问题中有一些附加信息,并且可能还有其他重复信息。

处理此问题的方法因语言和实现(尤其是编译器)而异,因此如果您指定使用的 C 或 C++ 实现,包括目标系统的详细信息,以及搜索相关问题,您可能会获得更多信息.

于 2013-08-10T23:06:38.813 回答
-1

而不是 polyfun(a)==polyfun(b) 尝试 ABS(polyfun(a) - polyfun(b)) < 1e-6, 或 1e-12 或任何你认为适合“接近”的东西......(是的,累积浮点错误仍然会杀死你。)

于 2013-08-10T23:58:28.853 回答