幂函数输出错误 - C [重复]

问题描述 投票:0回答:2

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 之类的。

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

因此,拥有两个 pow() 函数,并且将变量作为幂并将类型强制转换为整数会产生错误的输出。 为什么会有这种奇怪的行为??

c++ c pow
2个回答
5
投票

这是从浮点值生成整数的情况(它截断小数,而不是四舍五入),以及

pow(x, y)
转换为
exp(log(x) * y)
的事实,这将产生不精确的结果与 xy 相同 - 只是浮点值的近似值,例如 102 为 99.9999996(或 100.00002)。

如果您想将其舍入,请使用

round(pow(x, y))


2
投票

当您将

pow
与变量一起使用时,其结果是
double
。分配给
int
会截断它,您会得到 99 而不是 99.9999999。

使用不带变量的

pow
会被编译器优化(这是在编译时计算的)。

© www.soinside.com 2019 - 2024. All rights reserved.