首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >考虑负数的模数

考虑负数的模数
EN

Stack Overflow用户
提问于 2013-02-08 11:31:35
回答 3查看 121关注 0票数 0

我试着为模数写一段代码,但是当我对负数这样做时,我得不到正确的结果,我的代码:

代码语言:javascript
复制
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的情况下,使用我自己的数学库来实现这一点。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-08 11:36:12

只检查这部分代码:

代码语言:javascript
复制
if (X<0){
    do
    {
      result =  result + Y;
    }while(0 >= result);
}

假设X是-5,result是0。

将执行do循环:

代码语言:javascript
复制
1. pass - result = -3
2. pass - result = -1 
3. pass - result = -1 + 2 = 1

由于2. pass的结果仍然小于零,因此将执行3. pass

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

票数 2
EN

Stack Overflow用户

发布于 2013-02-08 11:35:28

你不见了

代码语言:javascript
复制
return result;
票数 2
EN

Stack Overflow用户

发布于 2013-02-08 11:46:45

考虑整数序列

代码语言:javascript
复制
-7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7

根据这个概念,对于负数

为了mod(-5, 2)。小于-5但被2整除的数是-6(不是-4;-4 > -5)。它的不同之处在于(-5 - -6),即1。这就是在您的代码中发生的事情

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14765243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档