未被驯化的甲鱼 发表于 2020-3-21 17:19:19

搞不懂,为什么我的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()使用规则是什么?有什么注意点?
望大佬指点!

zltzlt 发表于 2020-3-21 17:23:30

数据太大了,用 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);
}

sunrise085 发表于 2020-3-21 17:26:41

因为数据太大了。溢出了
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]
查看完整版本: 搞不懂,为什么我的pow(x,y)算出来的值是负数?