0

我有一个问题,也许这很愚蠢。我写了代码来计算求幂:

#include<stdio.h>

int i=0;
float power(int a,int b);
main()
{     int base,exp;
      printf("Base:\n");
      scanf("%d",&base);
      printf("Exp:\n");
      scanf("%d",&exp);
      power(base,exp);
      system("pause");
      }
float power(int a,int b)
{     float result=1;
      for (i=0;i<b;i++)
      {
          result=result*a;
          }
      printf("result = %lf \n",result);
      }

让我感到困惑的是,我给出的输入 base=2 和 exp=100 并且输出是正确的。我不明白的是,即使浮点类型是 4byte=32 位,程序如何计算正确的数字,其中表示 float(result) 变量可以得到的最大数是 2^32-1<<2^100

4

1 回答 1

2

您需要了解浮点数的存储方式。与定点数相比,在浮点数中,小数是浮点数。因此,虽然浮点数的精度是有限的或有限的,但它可以存储的数据范围比它看起来要大得多。

例如(只是一个类比来理解事物是如何工作的。实际理解请参考我在上一段中分享的浮点数链接)如果你有 3 位数字来表示数字,使用定点可以表示从 0 到 999 的数字(最小计数为 1)。但是,如果您使用 2 位数字和 (exponent-1) 的第三位数字,则可以表示 0 到 99x10 9(变量最小计数)。

于 2014-05-20T12:15:08.043 回答