我正在尝试使用舍入到最近、舍入到远离模式在 C++17 中执行浮点运算。在 cppreference.com 上搜索,我发现有四种舍入模式可用,包括舍入到最接近的值 (
FE_TONEAREST
)。不过,我没有找到关于FE_TONEAREST
模式的打破平局规则的信息。
我通过实验发现,至少在 GCC 上,
FE_TONEAREST
模式是使用 round-ties-to-even 规则实现的。是否可以将决胜规则改为平局胜负?如果是,我该怎么做?如果没有,是否有一个库可以使用 round-tie-to-away 规则实现浮点?
提前致谢。
这些
gesetround
参数的含义在相关部分中如何表述实现定义或多或少是一个缺陷,ISO仅声明这些宏在支持的情况下被定义,而在7.12.9最近的整数函数中为round定义的最近值.
lround 和 llround 函数将它们的参数四舍五入到最接近的 整数值,将中间情况舍入到远离零的位置,无论 当前的舍入方向。如果舍入值超出范围 返回类型的范围,数值结果未指定,并且 可能会出现域错误或范围错误。
对于 FE_TONEAREST 情况
nearbyint()
/rint()
应该以类似 round
的方式操作,半情况总是远离零。