2013-05-28 52 views
0

好吧,我希望我不会像这个问题一样白痴......因为这很基本,但是我的大脑不是在度假就是在做错事。C中的math.h库中的fmod函数无法正常工作?

那么-4 % 5-4 mod 5应该等于1是否正确?为什么使用它时,来自math.h库的fmod函数返回-4,即fmod(-4, 5)返回-4而不是1。如果有任何帮助,我正在使用gcc compiler via cygqin

谢谢!

+0

是的,它应该返回1而不是-4定义的mod。 – taocp

+0

同意,所以这是功能或可能我的编译器错误... –

回答

4

%运算符是其余运算符而不是模。 fmod函数也是浮点数余数,不是模数。在这种情况下,他们选择将-4/5朝0整数转换为整数。

+0

好吧,他们应该重命名的功能,然后我猜...感谢很多寿! –

+0

@SabashanRagavan:你犯的一个重要错误是猜测函数的接口契约(当然,基于一个误导性的名字),而不是阅读规范,这明显地解释了所需的结果。 –

1

POSIX states

#include <math.h> 
    double fmod(double x, double y); 

这些函数应当返回值x - i * y,对于某些整数i使得 如果y是非零,结果具有相同的符号作为x和幅度小于比y的 大小。

fmod(-4,5)的情况下,由于结果必须具有x相同的尺寸,这将是负的,并且i不能小于零。如果i为1,则结果将大于y,所以i必须为零,并且-4.0的结果是正确的。