好吧,我希望我不会像这个问题一样白痴......因为这很基本,但是我的大脑不是在度假就是在做错事。C中的math.h库中的fmod函数无法正常工作?
那么-4 % 5
或-4 mod 5
应该等于1
是否正确?为什么使用它时,来自math.h库的fmod
函数返回-4
,即fmod(-4, 5)
返回-4
而不是1
。如果有任何帮助,我正在使用gcc compiler via cygqin
。
谢谢!
好吧,我希望我不会像这个问题一样白痴......因为这很基本,但是我的大脑不是在度假就是在做错事。C中的math.h库中的fmod函数无法正常工作?
那么-4 % 5
或-4 mod 5
应该等于1
是否正确?为什么使用它时,来自math.h库的fmod
函数返回-4
,即fmod(-4, 5)
返回-4
而不是1
。如果有任何帮助,我正在使用gcc compiler via cygqin
。
谢谢!
%
运算符是其余运算符而不是模。 fmod
函数也是浮点数余数,不是模数。在这种情况下,他们选择将-4/5朝0整数转换为整数。
好吧,他们应该重命名的功能,然后我猜...感谢很多寿! –
@SabashanRagavan:你犯的一个重要错误是猜测函数的接口契约(当然,基于一个误导性的名字),而不是阅读规范,这明显地解释了所需的结果。 –
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
的结果是正确的。
是的,它应该返回1而不是-4定义的mod。 – taocp
同意,所以这是功能或可能我的编译器错误... –