S1E6麦子问题程序疑惑
各位大佬好,这题目关于取值范围的要求我大概明白了。但是有个疑问。在编程时#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=temp+sum;/*这部分为什么不能偷懒写成sum=pow(2,i)+sum; 试了下结果是0*/
};
printf("sum=%llu\n",sum);
return 0;
}
关于红字部分为什么不能写作sum=pow(2,i)+sum呀 或者请问这是那部分能学到的知识呢 是不是超出最大范围了,所以最终结果为0了,你可以试一下2的63次方,估计应该是正确的,
两种写法都可以,但是第二种计算方法出现奇怪问题的原因可能是存储位数的问题吧,并不太清楚。
你可以看一下这样增加几行代码的结果,或许你就明白了
#include<math.h>
#include<stdio.h>
int main()
{
unsigned long long sum=0;
unsigned long long sum1=0;
unsigned long long temp;
unsigned long long weight;
int i;
for (i=0;i<64;i++)
{
temp=pow(2,i);
sum=temp+sum;/*这部分为什么不能偷懒写成sum=pow(2,i)+sum; 试了下结果是0*/
printf("pow(2,%d)=%llu",i,pow(2,i)) ;
sum1=pow(2,i)+sum1;
printf("sum=%llu\n",sum1);
};
printf("sum=%llu\n",sum);
return 0;
} sum=(unsigned long long)(pow(2,i))+sum; // 因为pow返回的是double类型 上面 ba21 回答是正解。牛!!!o( ̄▽ ̄)d。 谢谢两位的答疑!继续学习争取完全搞明白!(关于返回值好像还没学到 我猜这个语句(unsigned long long)(pow(2,i))的意思是把pow(2,i)计算出的结果定义成一个unsigned long long 的数值 再进行sum=结果+sum的计算{:10_257:}
页:
[1]