有人可以解释一下函数std::fmod和std::remainder是如何工作的吗?在这种情况下std::fmod,有人可以解释一下步骤来说明如何:
std::fmod(+5.1, +3.0) = 2.1
Run Code Online (Sandbox Code Playgroud)
同样的事情std::remainder也会产生负面结果。
std::remainder(+5.1, +3.0) = -0.9
std::remainder(-5.1, +3.0) = 0.9
Run Code Online (Sandbox Code Playgroud)
正如std::fmod的参考所述:
\n\n该函数计算出的除法运算的浮点余数x/y正是值x - n*y,其中n的x/y小数部分被截断。
返回值的符号相同, 且大小x小于。y
因此,以问题中的例子为例,当x = +5.1和 时y = +3.0,\nx/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的参考状态为:
\n此函数计算的除法运算的 IEEE 浮点余数x/y恰好是值x - n*y,其中值 n 是最接近精确值 的整数值x/y。当 时|n-x/y| = \xc2\xbd,该值n被选择为偶数。
因此,以问题中的例子为例,当x = +5.1和y = +3.0\n最接近的整数x/y (1.7)值为2。亦是如此。n 2因此,remainder将产生x - 2y5.1 - 2 * 3.0 ,5.1 - 6.0即-0.9。
但当x = -5.1和y = +3.0\n最接近的整数x/y (-1.7)值为-2。亦是如此。n -2所以remainder意志产量x - 2y是 哪-5.1 - (-2) * 3.0是-5.1 + 6.0哪是+0.9
该参考文献还指出: 与 相比std::fmod(),返回值不保证与具有相同的符号x。