搞不懂,为什么我的pow(x,y)算出来的值是负数?
代码如下#include<stdio.h>
#include<math.h>
int main()
{
long kg,x = 2,i = 1,temp,sum;
for(i;i<65;i++)
{
temp = pow(x,i);
sum = sum + temp;
}
kg = sum / 25000;
printf("%d\n",temp);
printf("%d\n",sum);
printf("%d\n",kg);
printf("%d,%d\n",x,i);
}
运行后temp = -2147483648
为什么会求出负数?
pow()使用规则是什么?有什么注意点?
望大佬指点!
数据太大了,用 long long 也不行:
#include <stdio.h>
#include <math.h>
int main()
{
long long kg, x = 2, i = 1, temp, sum = 0;
for (i; i < 65; i++)
{
temp = (long long)pow(x, i);
sum = sum + temp;
}
kg = sum / 25000;
printf("%lld\n", temp);
printf("%lld\n", sum);
printf("%lld\n", kg);
printf("%lld, %lld\n", x, i);
} 因为数据太大了。溢出了
sum的结果接近2的65次方。
而long long也才2的64次方。完全装不下。
需要用double
#include<stdio.h>
#include<math.h>
int main()
{
double kg,x = 2,i = 1,temp,sum=0;
for(i;i<65;i++)
{
temp = pow(x,i);
sum = sum + temp;
}
kg = sum / 25000;
printf("%.0lf\n",temp);
printf("%.0lf\n",sum);
printf("%.0lf\n",kg);
printf("%.0lf,%.0lf\n",x,i);
}
页:
[1]