C语言S1E6_1题舍罕王的失算,两种加法结果不一致
#include <stdio.h>#include <math.h>
#define NUMBER_PEEKG 25000
int main()
{
int i;
unsigned long longpower;
unsigned long long sum;
unsigned long long weight;
unsigned long long total;
int sz = 0;
i = 0;
power = 0;
sum = 0;
total = 0;
sz = sizeof(sum);
printf("sizeof(i)=%d\n",sz);
for(i=0;i<64;i++)
{
power = pow(2,i);
sum = sum + power;
total = total + pow(2,i);
//printf("一共%llu颗麦子。\n",sum);
}
weight = sum /NUMBER_PEEKG;
printf("一共%llu颗麦子。\n",sum);
printf("一共%llu颗麦子。\n",total);
printf("共重%llu公斤。\n",weight);
return 0;
}
输出结果:
sizeof(i)=8
一共18446744073709551615颗麦子。
一共0颗麦子。
共重737869762948382公斤。
问题:
求麦子总和两种加法,结果不一样?是pow()函数的返回值类型是double吗?double + unsigned 溢出?结果为何是0? total = total + pow(2, i);
改为
total = total + (unsigned long long)pow(2, i); yuxijian2020 发表于 2021-6-16 17:01
改为
谢谢!
为何减小i的取值范围,输出结果在没有类型转换时也是一致的呢?
代码:
for(i=0;i<10;i++)
{
power = pow(2,i);
sum = sum + power;
total = total + pow(2,i);
//printf("一共%llu颗麦子。\n",sum);
}
结果:
sizeof(i)=8
一共1023颗麦子。
一共1023颗麦子。
共重0公斤。
梦梦q 发表于 2021-6-24 10:50
谢谢!
为何减小i的取值范围,输出结果在没有类型转换时也是一致的呢?
代码:
数字太小,不影响高位
但是隐式转换本身就不是一个啥好东西
页:
[1]