<分区>
C/C++中如何保证函数返回一致的浮点值?
我的意思是:如果 a
和 b
是浮点类型,如果我写了一个多项式函数(它接受浮点参数并返回浮点结果),让调用它polyfun()
,编译器是否可以确保:
如果 a==b
,则 polyfun(a)==polyfun(b)
,这意味着数学运算/四舍五入的顺序在运行时是一致的?
标签 c++ c floating-point
<分区>
C/C++中如何保证函数返回一致的浮点值?
我的意思是:如果 a
和 b
是浮点类型,如果我写了一个多项式函数(它接受浮点参数并返回浮点结果),让调用它polyfun()
,编译器是否可以确保:
如果 a==b
,则 polyfun(a)==polyfun(b)
,这意味着数学运算/四舍五入的顺序在运行时是一致的?
最佳答案
语言标准不保证可重现的结果。通常,允许 C 实现以比标称类型更高的精度计算浮点表达式。它可能以不可预测的方式这样做,例如在一个地方而不是另一个地方内联一个函数调用,或者在两个地方内联一个函数调用,但在一个地方,将结果缩小到标称类型以将其保存在堆栈中,然后再检索将其与另一个值进行比较。
一些附加信息在 this question 中,并且可能还有其他重复项。
处理此问题的方法因语言和实现(尤其是编译器)而异,因此如果您指定正在使用的 C 或 C++ 实现(包括目标系统的详细信息)以及搜索相关问题。
关于c++ - 如何确保函数在 C/C++ 中返回一致的浮点值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18167150/