有人可以解释一下函数的功能吗 std::fmod和 std::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
最佳答案
作为 std::fmod 的引用状态:
除法运算的浮点余数x/y
这个函数计算出的值恰好是x - n*y
, 其中n
是x/y
小数部分被截断。
返回值具有相同的符号 x
并且小于 y
在幅度上。
以问题中的例子为例,当x = +5.1
和 y = +3.0
,
x/y
(5.1/3.0 = 1.7)
其小数部分被截断为 1。所以 n
是1
.所以 fmod
将产生 x - 1*y
这是 5.1 - 1 * 3.0
这是 5.1 - 3.0
这是 2.1
.
std::remainder 的引用状态强>:
除法运算的 IEEE 浮点余数 x/y
这个函数计算出的值恰好是x - n*y
,其中值 n 是最接近精确值 x/y
的整数值.当|n-x/y| = ½
, 值 n
被选择为偶数。
以问题中的例子为例,当x = +5.1
和 y = +3.0
最接近 x/y (1.7)
的整数值是2
.所以n
是2
.所以 remainder
将产生 x - 2y
这是 5.1 - 2 * 3.0 这是 5.1 - 6.0
这是 -0.9
.
但是当x = -5.1
和 y = +3.0
最接近 x/y (-1.7)
的整数值是-2
.所以n
是-2
.所以 remainder
将产生 x - 2y
这是 -5.1 - (-2) * 3.0
这是 -5.1 + 6.0
这是 +0.9
该引用文献还指出:与 std::fmod()
相比,返回值不保证与x
具有相同的符号 .
关于c++ - 理解 std::fmod 和 std::remainder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54473247/