C++函数'remainder'和'fmod'之间的区别是什么?

10

最近我遇到了需要在C++中使用fmod()函数来计算两个long double操作数的余数的需求。

但我也发现C++中有一个名为"remainder"的函数,它几乎可以完成同样的工作。

这两个函数之间有什么区别呢?


你在发布之前查过这个吗?http://en.cppreference.com/w/c/numeric/math/remainder - Oliver Charlesworth
2
@OliCharlesworth 我做了,但是由于不同的答案我感到困惑。 - mayank baiswar
4个回答

9

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

5

3

换句话说:

std::remainder(x,y)总是返回[-y/2,y/2]之间的值,

std::fmod(x,y)将根据x的符号返回[0,abs(y)]或[-abs(y),0]。


2

fmod计算的是“这些函数计算分子除以分母的余数。具体来说,返回值为numerator - n * denominator,其中n是numerator除以denominator的商,向零舍入为整数”

remainder计算的是“这些函数与fmod类似,不同之处在于它们将内部商n四舍五入为最近的整数,而不是向零舍入为整数”


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接