4

pow() 函数给出了非常奇怪的输出。

我尝试了各种组合:

#include<stdio.h>
#include<math.h>
int main()
{
  int d=1;
  long long n1,n2;
  while(d<10)
  {

     n1=pow(10,d);
     n2=pow(10,d);
     d++;
     printf("%lld %lld\n",n1,n2);
  }
 }

这给出了错误的输出,即 99 而不是 100 等等。

现在如果我删除其中一个变量,ans。是正确的。如果我使用常数而不是 d,则 ans 是正确的。如果我将 n1 和 n2 作为双倍,则 ans 是正确的。

因此,拥有两个 pow() 函数,它们都将变量作为幂和类型转换为整数,这会产生糟糕的输出。为什么会出现这种奇怪的行为?

4

2 回答 2

4

这是从浮点值(截断小数,而不是四舍五入)生成整数的情况,以及pow(x, y)转换为的事实,这将产生与 x yexp(log(x) * y)不完全相同的结果- 只是一个作为浮点值的近似近似值,例如 10 2的 99.9999996(或 100.00002) 。

如果要舍入它,请使用round(pow(x, y)).

于 2013-06-15T10:17:45.373 回答
2

当您使用powwith 变量时,其结果为double. 分配给一个int截断它,你得到 99 而不是 99.9999999。

编译器优化使用pow无变量(这是在编译时计算的)。

于 2013-06-15T10:15:49.727 回答