关于C ++:幂函数输出错误-C

wrong output by power function - C

本问题已经有最佳答案,请猛点这里访问。

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

我尝试了各种组合:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#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\
"
,n1,n2);
  }
 }

这样会产生错误的输出,即99,而不是100,如此。

现在,如果我删除变量之一,ans。 是正确的。
如果不是d,我使用一个常数,ans是正确的。
如果我将n1和n2设为两倍,ans是正确的。

因此,拥有两个pow()函数同时具有变量的幂和类型强制转换为整数的pow()函数会产生不良输出。
为什么这种奇怪的行为?


这是从浮点值(将小数点舍入而不是四舍五入)制成整数的情况,以及pow(x, y)转换为exp(log(x) * y)的事实,这将产生与精确度不同的结果 as xy-几乎是一个近似的浮点值,例如102的99.9999996(或100.00002)。

如果要四舍五入,请使用round(pow(x, y))


当对变量使用pow时,其结果为double。 分配给int会将其截断,您将得到99而不是99.9999999。

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