用于计算负数的模数

时间:2013-02-08 03:31:35

标签: c++

我正在尝试为模数编写代码,但是当我为负数编写代码时,我得不到正确的结果,我的代码:

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。

编辑:我的返回结果是在程序的后期部分,并显示输出。这只是整个程序本身的一个块。

3 个答案:

答案 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。 这就是你的代码中发生的事情