0

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

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 来做到这一点。

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

4

3 回答 3

2

你不见了

return result;
于 2013-02-08T03:35:27.847 回答
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将被执行,因为结果 from2. pass仍然小于零。

您需要将循环条件更改为while(0 >= result + Y)

于 2013-02-08T03:36:11.623 回答
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。这就是您的代码中发生的事情

于 2013-02-08T03:46:44.973 回答