最近我遇到了需要在C++中使用fmod()
函数来计算两个long double操作数的余数的需求。
但我也发现C++中有一个名为"remainder"的函数,它几乎可以完成同样的工作。
这两个函数之间有什么区别呢?
最近我遇到了需要在C++中使用fmod()
函数来计算两个long double操作数的余数的需求。
但我也发现C++中有一个名为"remainder"的函数,它几乎可以完成同样的工作。
这两个函数之间有什么区别呢?
remainder()
函数在C++中计算分子/分母的浮点余数(四舍五入至最近值)。
remainder(x,y)
= x - rquote * y
其中rquote是x/y的结果,向最近整数值四舍五入(半数情况向偶数)。
另一方面,fmod()
函数在C++中计算分子/分母的浮点余数(朝零方向舍入)。
fmod(x,y)
= x - tquote * y
其中tquote是x/y的截断即(朝零方向舍入)的结果。
例子
double x = 7.5, y = 2.1;
double result = remainder(x, y);// output is -0.9
double result2 = fmod(x, y);// output is 1.2
来自http://en.cppreference.com/w/cpp/numeric/math/remainder:
与
std::fmod()
相比,返回值的符号不保证与x
相同。
换句话说:
std::remainder(x,y)
总是返回[-y/2,y/2]之间的值,
std::fmod(x,y)
将根据x的符号返回[0,abs(y)]或[-abs(y),0]。
fmod计算的是“这些函数计算分子除以分母的余数。具体来说,返回值为numerator - n * denominator,其中n是numerator除以denominator的商,向零舍入为整数”
remainder计算的是“这些函数与fmod类似,不同之处在于它们将内部商n四舍五入为最近的整数,而不是向零舍入为整数”