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

标签 c++ c floating-point

<分区>

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

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

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

最佳答案

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

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

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

关于c++ - 如何确保函数在 C/C++ 中返回一致的浮点值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18167150/

相关文章:

c++ - OSX MetalKit CVMetalTextureCacheCreateTextureFromImage失败,状态:-6660

c++ - 如何用 Python 判断一个文件在 Windows 上是否可执行?

c++ - 在返回表达式中奇怪地使用 & 运算符

c++ - 如何在 BYTE 数组中搜索模式?

c++ - 我可以在函数头中包含 cppcheck 抑制吗?

c - gcc如何识别-lfl对应于flex库?

java - 如何按可能具有浮点值且没有适当等于的成员比较两个对象?

java - double 也是一种 float 吗?

c++ - 了解 C 类型定义

math - 稍微转向浮点 (im) 精度,第 1 部分