姜子牙疼 发表于 2021-9-2 16:58:22

pow函数

#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;
      }

      weight = sum / 25000;

      printf("舍罕王应该给予达依尔%llu粒麦子!\n", sum);
      printf("如果每25000粒麦子为1kg,那么应该给%llu公斤麦子!\n", weight);

      return 0;
}




pow函数原型是double
可为什么这道题(舍罕王)的temp不用double定义也可以

Valentine1989 发表于 2021-9-2 17:45:55

您好,C由于其temp精度并未“降”而是“升”为比double更大的unsigned long long,你的目的值又是2,所以无论2的多少次方都可以使用整数表示而不会降低精度,所以在这里编译器将pow( )函数的返回值隐式类型转换为unsigned long long并不会出错。如果是使用int这种小精度类型去进行转换,则会导致double的精度降低,有可能会导致数据溢出而得到一个异常的结果,int能表示的整数范围只有2的15次方(有一位是符号表示)。
页: [1]
查看完整版本: pow函数