【问题标题】:What is the practical use of changing the rounding mode in floating point evnironment?在浮点环境中更改舍入模式的实际用途是什么?
【发布时间】:2020-11-29 10:48:59
【问题描述】:

我正在尝试找到在 IEEE-754 浮点环境中更改舍入模式的好方法。

我主要从 C 和 C++ 代码的角度来看。在那里,可以使用

int fesetround(int round)

来自"fenv.x"(或C++ 中的<cfenv>)的函数。

我能找到的最佳用途是将环境设置为 FE_TONEAREST,如果出于任何不可原谅的原因,它不是默认设置。

In this question 有人建议使用它来获得一些依赖于实现的字符串格式化行为。我个人认为这个答案完全错误,并且我相信围绕格式化函数更改舍入模式只会导致意外或完全错误的行为。

舍入模式改变的另一件事是函数:nearbyintrint。但是你为什么要使用它们,而不是分派给floorceiltrunc 函数呢?

剩下的唯一有用的部分是浮点运算的局部差异。这在哪里有用?我试图为此找到一些利基用途,但到目前为止我找不到任何用途。

【问题讨论】:

  • 你看过小众的“区间算术”吗?显然,在舍入模式下烘焙的指令(如在 GPU 上,可通过内部函数访问)对此更有用,但在紧要关头,动态变化的舍入模式会这样做,但会以性能为代价。

标签: c++ c floating-point ieee-754


【解决方案1】:

roding 模式与地板和天花板关系不大(后者将 转为整数)。我不知道trunk 函数。

在理论研究表明特定规则比其他规则具有优势或提供某些理想保证的一些复杂情况下,更改舍入规则可能很有用。

【讨论】:

  • trunc(),而不是trunk()。它向零截断。
  • @Shawn:我知道trunc
猜你喜欢
  • 2011-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-02
  • 2019-05-17
  • 2015-04-22
  • 2021-07-22
相关资源
最近更新 更多