sai_wq 发表于 2020-8-26 18:33:28

萌新求助

      for (i=0; i < 64; i++)
      {
                temp = pow(2, i);
                sum = sum + temp;
      }
------------------------------------------------
      for (i=0; i < 64; i++)
      {
                sum = sum + pow(2, i);
      }

请问这两段代码有什么区别,为什么按下面的写,打印出来的结果是0,按上面的写的打印结果正常.
{:10_266:}

昨非 发表于 2020-8-26 18:42:54

本帖最后由 昨非 于 2020-8-26 18:48 编辑

没。。没区别吧{:10_245:}
而且,你确定C语言能算了这么大的数??

风过无痕1989 发表于 2020-8-26 18:56:08

数据类型用 double 型,输出采用科学记数法,两个输出是一样的。否则会因为数据类型导致数据丢失

永恒的蓝色梦想 发表于 2020-8-26 19:02:37

第二段改成      for (i=0; i < 64; i++)
      {
                sum = sum + (unsigned long long)pow(2, i);
      }就可以正常运行了。
具体原因我也不是很清楚,但是和浮点数有关。

永恒的蓝色梦想 发表于 2020-8-26 19:05:34

对了,如果要计算2的n次方的话,建议你使用这个宏:#define pow2(x) ((unsigned long long)(1) << (x))

风过无痕1989 发表于 2020-8-26 19:16:18

#include <stdio.h>
#include <math.h>
int main(void)
{
    double sum = 0,temp = 0;   
        int i;
        for (i = 0;i < 64;i++)
    {
                temp = pow(2,i);
                sum = sum + temp;
/*                sum = sum + pow(2,i); */
    }
        printf("%e\n",sum);
}



sai_wq 发表于 2020-8-27 13:17:00

风过无痕1989 发表于 2020-8-26 19:16


我是在课后习题时候发现这个问题的,按小甲鱼的代码运行可以正确运行,吧其中的循环部分合并起来就不行了


#include <stdio.h>
#include <math.h>

int main()
{
      unsigned long long sum = 0;
      unsigned long long temp;
      unsigned long long weight;
      int i;

      for (i=0; i < 64; i++)
      {
                //temp = pow(2, i);
                //sum = sum + temp;
                sum = sum+ pow(2, i);   //这里改成这样就不行
      }

      weight = sum / 25000;

      printf("舍罕王应该给予达依尔%e粒麦子!\n", sum);//这里按你的%e也不行
      printf("如果每25000粒麦子为1kg,那么应该给%llu公斤麦子!\n", weight);

      return 0;
}

sai_wq 发表于 2020-8-27 13:19:19

永恒的蓝色梦想 发表于 2020-8-26 19:02
第二段改成就可以正常运行了。
具体原因我也不是很清楚,但是和浮点数有关。

这样改果然可以.{:10_254:}

sai_wq 发表于 2020-8-27 13:21:19

昨非 发表于 2020-8-26 18:42
没。。没区别吧
而且,你确定C语言能算了这么大的数??

课后习题...{:10_254:}

永恒的蓝色梦想 发表于 2020-8-27 13:26:24

风过无痕1989 发表于 2020-8-26 18:56
数据类型用 double 型,输出采用科学记数法,两个输出是一样的。否则会因为数据类型导致数据丢失

因为数据类型导致数据丢失???

昨非 发表于 2020-8-27 13:26:28

好吧,打扰了

风过无痕1989 发表于 2020-8-27 15:32:18

永恒的蓝色梦想 发表于 2020-8-27 13:26
???

我用 float 型,在步进计算到 i = 45 时,就溢出了,这个时候的 sum = 0。我用的是VC++6.0,你可以试试的你的编译器,计算到哪一步

永恒的蓝色梦想 发表于 2020-8-27 15:42:41

风过无痕1989 发表于 2020-8-27 15:32
我用 float 型,在步进计算到 i = 45 时,就溢出了,这个时候的 sum = 0。我用的是VC++6.0,你可以试试的 ...

这和这个问题有关系么?

风过无痕1989 发表于 2020-8-27 18:30:05

永恒的蓝色梦想 发表于 2020-8-27 15:42
这和这个问题有关系么?

他的程序本来是没有问题,只是因为使用数据类型不对,在强行进行数据转换时出错了
页: [1]
查看完整版本: 萌新求助