【发布时间】:2015-07-15 23:33:32
【问题描述】:
我有两个浮点(双精度)值 a 和 b,我希望将它们相加以获得结果 c .
我知道 c 会以某种方式近似,因为一切都是有限精度。现在,我想“向下取整”c,这意味着浮点 c 不大于浮点 a 和b,或 c a + b.
我该怎么做?想到以下c中的代码,但我不确定答案是否是我想要的。
c = nextafter(a + b, bigNegativeNumber)
同样的问题也适用于乘法而不是加法。 :)
PS。如果有帮助,a 和 b 始终是非负数。
编辑:c 也应该是一个浮点数
【问题讨论】:
-
如果 c 是整数类型,那么你可以直接转换
-
至少在某些架构上,您可以将舍入模式设置为向零或负无穷大舍入:
IEEE 754 1985: 4.2. Directed Roundings An implementation shall also provide three user-selectable directed rounding modes: round toward +INFINITY, round toward – INFINITY, and round toward 0. -
与风向标相同,但路线更长,
c = floor(-1 * (a + b))*-1;如果小数四舍五入有问题。 -
@user3528438 它是浮点类型,而不是整数。如果它是整数,那么一开始就没有问题。
-
@WeatherVane 我编辑了帖子,我有兴趣找到一个浮点值,而不是整数。抱歉含糊其辞。
标签: c floating-point double rounding