将浮点数四舍五入到最接近的整数,一半接近零

问题描述 投票:0回答:1

查看 GNU 提供的舍入函数集,我无法准确找到我要查找的内容。

根据 GNU 文档

rint()
小伙伴们会根据当前的舍入模式舍入为整数,默认为舍入到最接近的整数

这主要是我想要的,但它似乎是无限模型的一半。 那就是

llround ( 1.500000 ==  2), want  1
llround (-1.500000 == -2), want -1
llrint  ( 1.500000 ==  2), want  1
llrint  (-1.500000 == -2), want -1

round()
和朋友的文档指出: 这些函数与 rint 类似,但它们将中间情况舍入到远离零的位置,而不是舍入到最接近的整数(或其他当前舍入模式)。

我无法确定任何使用默认舍入模式的函数,但具有 接近零 语义

具体来说,我想要

  • 四舍五入到最接近的整数
  • 走向零的一半
  • 正值和负值

有这样的存在吗?

与此同时,我采取了以下方法。 我对此不是很热衷,但它可以满足我有限的用例

(float_val > 0) ? llrint(float_val - __FLT_EPSILON__) : llrint(float_val + __FLT_EPSILON__)
c++ c rounding
1个回答
0
投票

有趣的是,您想要的操作不是 IEEE 754 中指定的任何操作。这些操作是(来自维基百科):

虽然“向 0 舍入”最初听起来可能像您想要的,但它实际上只是删除小数部分,因此 1.9 变为 1,而 -1.9 变为 -1。

所以你需要自己实现操作,如注释所示。

© www.soinside.com 2019 - 2024. All rights reserved.