我正在尝试找到在 IEEE-754 浮点环境中更改舍入模式的好方法。
我主要从 C 和 C++ 代码的角度来看。在那里,可以使用
来完成int fesetround(int round)
来自
"fenv.x"
(或 C++ 中的 <cfenv>
)的函数。
我能找到的最佳用途是将环境设置为
FE_TONEAREST
,如果出于某种不可预见的原因它不是默认值。
在这个问题中有人建议使用它来获得一些依赖于实现的字符串格式化行为。我个人认为这个答案完全错误,并且我相信更改格式化函数的舍入模式只会导致意外或完全错误的行为。
舍入模式改变的另一件事是函数:
nearbyint
和rint
。但为什么你想使用它们,而不是分派到 floor
、ceil
和 trunc
函数呢?
剩下的唯一有用的部分就是浮点运算中的局部差异。这能用在什么地方呢?我试图为此找到一些利基用途,但到目前为止我找不到任何用途。
轮询模式与下限和上限关系不大(后者轮询为整数)。我不知道 trunk
函数。在某些复杂的情况下,更改舍入规则可能很有用,其中理论研究表明特定规则比其他规则具有优势或提供了一些理想的保证。