好吧,所以希望我问这个问题不会看起来像个白痴……因为这是非常基本的,但我的大脑要么在度假,要么确实出了问题。
那么
-4 % 5
或 -4 mod 5
应该等于 1
对吗?为什么 math.h 库中的 fmod
函数在使用时返回 -4
,即 fmod(-4, 5)
返回 -4
而不是 1
。我正在使用 gcc compiler via cygqin
如果这也有帮助的话。
谢谢!
%
运算符是余数运算符,而不是模数。 fmod
函数也是浮点 余数,而不是模数。 在本例中,他们选择将 -4/5 向 0 舍入为整数。
POSIX 状态:
#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
的结果是正确的。
您的编译器使用以下公式:
m = -4 - (Trunc(-4 / 5) * 5)
m = -4 - (Trunc(-0.8) * 5)
m = -4 - (0 * 5)
m = -4 - 0
m = -4
代替:
m = -4 - (Floor(-4 / 5) * 5)
m = -4 - (Floor(-0.8) * 5)
m = -4 - (-1 * 5)
m = -4 - (-5)
m = 1