【发布时间】:2020-11-29 10:48:59
【问题描述】:
我正在尝试找到在 IEEE-754 浮点环境中更改舍入模式的好方法。
我主要从 C 和 C++ 代码的角度来看。在那里,可以使用
int fesetround(int round)
来自"fenv.x"(或C++ 中的<cfenv>)的函数。
我能找到的最佳用途是将环境设置为 FE_TONEAREST,如果出于任何不可原谅的原因,它不是默认设置。
In this question 有人建议使用它来获得一些依赖于实现的字符串格式化行为。我个人认为这个答案完全错误,并且我相信围绕格式化函数更改舍入模式只会导致意外或完全错误的行为。
舍入模式改变的另一件事是函数:nearbyint 和 rint。但是你为什么要使用它们,而不是分派给floor、ceil 和trunc 函数呢?
剩下的唯一有用的部分是浮点运算的局部差异。这在哪里有用?我试图为此找到一些利基用途,但到目前为止我找不到任何用途。
【问题讨论】:
-
你看过小众的“区间算术”吗?显然,在舍入模式下烘焙的指令(如在 GPU 上,可通过内部函数访问)对此更有用,但在紧要关头,动态变化的舍入模式会这样做,但会以性能为代价。
标签: c++ c floating-point ieee-754