我正在尝试为模数编写代码,但是当我为负数编写代码时,我得不到正确的结果,我的代码:
double mod (double X, double Y)
{
double result = X;
if (X>0){
do
{
result = result - Y;
}while(result >= Y);
}
if (X<0){
do
{
result = result + Y;
}while(0 >= result);
}
}
当你执行类似mod(-5,2)的操作时,它应该返回-1,但它返回1,为什么当它不能大于0时返回1?
在我看来,我觉得它的作用就像-5 + 2 = -3 + 2 = -1。对于正数,它将是5 - 2 = 3 - 2 = 1。
感谢。
编辑:我正在尝试使用我自己的数学库而不使用CMATH。
编辑:我的返回结果是在程序的后期部分,并显示输出。这只是整个程序本身的一个块。
答案 0 :(得分:2)
你错过了
return result;
答案 1 :(得分:2)
仅检查这部分代码:
if (X<0){
do
{
result = result + Y;
}while(0 >= result);
}
假设X为-5,result
为0。
do
循环将被执行:
1. pass - result = -3
2. pass - result = -1
3. pass - result = -1 + 2 = 1
3. pass
将在2. pass
仍小于零的情况下执行。
您需要将循环条件更改为while(0 >= result + Y)
答案 2 :(得分:1)
考虑整数序列
-7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7
在接受mod(5,2)
时,我们将2的倍数小于或等于5,然后返回差值5.即1 (5-4)
根据这个概念的负数
代表mod(-5, 2)
。小于-5的可被2整除的数是-6(不是-4; -4> -5)。它的差异是(-5 - -6)
,即1
。
这就是你的代码中发生的事情