了解std :: fmod和std :: remainder

时间:2019-02-01 05:12:37

标签: c++ math stl

有人可以解释功能std::fmodstd::remainder的工作方式。对于std::fmod,有人可以解释这些步骤以显示如何:

std::fmod(+5.1, +3.0) = 2.1

std::remainder也会产生负面结果。

std::remainder(+5.1, +3.0) = -0.9
std::remainder(-5.1, +3.0) = 0.9

1 个答案:

答案 0 :(得分:1)

作为 std::fmod 的参考状态:

此函数计算的除法运算x/y的浮点余数正好是值x - n*y,其中nx/y,其小数部分被截断了。 / p>

返回值的符号与 {strong> x 相同,并且幅度小于y

以问题中的示例为例,当x = +5.1y = +3.0时, x/y (5.1/3.0 = 1.7),其小数部分被截断为1。因此,n1。因此fmod将产生x - 1*y,即5.1 - 1 * 3.0,即5.1 - 3.0,即2.1

std::remainder 的参考状态:
该函数计算的除法运算x/y的IEEE浮点余数正好是值x - n*y,其中值n是最接近精确值x/y的整数值。当|n-x/y| = ½时,值n被选择为偶数。

以问题的例子为例,x = +5.1y = +3.0x/y (1.7)最接近的整数值为2。因此n2。因此remainder将产生x - 2y,它是5.1-2 * 3.0,而5.1 - 6.0 -0.9

但是当x = -5.1y = +3.0x/y (-1.7)最接近的整数值为-2。因此n-2。因此remainder将产生x - 2y,即-5.1 - (-2) * 3.0,即-5.1 + 6.0,即 +0.9

参考文献还指出:与std::fmod()相比,不保证返回的值与x具有相同的符号