c++ - 理解 std::fmod 和 std::remainder

标签 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

最佳答案

作为 std::fmod 的引用状态:

除法运算的浮点余数x/y这个函数计算出的值恰好是x - n*y , 其中nx/y小数部分被截断。

返回值具有相同的符号 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 的引用状态:
除法运算的 IEEE 浮点余数 x/y这个函数计算出的值恰好是x - n*y ,其中值 n 是最接近精确值 x/y 的整数值.当|n-x/y| = ½ , 值 n被选择为偶数。

以问题中的例子为例,当x = +5.1y = +3.0 最接近 x/y (1.7) 的整数值是2 .所以n2 .所以 remainder将产生 x - 2y这是 5.1 - 2 * 3.0 这是 5.1 - 6.0这是 -0.9 .

但是当x = -5.1y = +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/

相关文章:

Java:生成具有对数分布的随机数

c++ - unique_ptr 编译错误

c++ - 如何在不循环的情况下将数组的内容复制到 C++ 中的 std::vector?

c++ - CDaoRecordSet 从列中选择所有

c++ - 带 const 且不带 const 限定符的 typedef

java - 在圆圈内弹跳球

algorithm - 无向无权图中的最长路径

c++ - 我的定制比较不起作用?

c++ - 具有透明度的 MFC 图像按钮

c++ - vector 迭代器不可取消引用?