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

时间:2013-08-10 23:01:24

标签: c++ c floating-point

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

我的意思是:如果ab是浮点类型,如果我写了一个多项式函数(它采用浮点参数并返回浮点结果),我们称之为{{1} },编译器可以确保:

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

2 个答案:

答案 0 :(得分:3)

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

其他一些信息在this question中,并且可能还有其他重复信息。

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

答案 1 :(得分:-1)

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