C 中 math.h 库中的 fmod 函数无法正常工作?

问题描述 投票:0回答:3

好吧,所以希望我问这个问题不会看起来像个白痴……因为这是非常基本的,但我的大脑要么在度假,要么确实出了问题。

那么

-4 % 5
-4 mod 5
应该等于
1
对吗?为什么 math.h 库中的
fmod
函数在使用时返回
-4
,即
fmod(-4, 5)
返回
-4
而不是
1
。我正在使用
gcc compiler via cygqin
如果这也有帮助的话。

谢谢!

c math gcc cygwin modulo
3个回答
4
投票

%
运算符是余数运算符,而不是模数。
fmod
函数也是浮点 余数,而不是模数。 在本例中,他们选择将 -4/5 向 0 舍入为整数。


1
投票

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
的结果是正确的。


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
© www.soinside.com 2019 - 2024. All rights reserved.