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() 函数,并且将变量作为幂并将类型强制转换为整数会产生错误的输出。 为什么会有这种奇怪的行为??
这是从浮点值生成整数的情况(它截断小数,而不是四舍五入),以及
pow(x, y)
转换为 exp(log(x) * y)
的事实,这将产生不精确的结果与 xy 相同 - 只是浮点值的近似值,例如 102 为 99.9999996(或 100.00002)。
如果您想将其舍入,请使用
round(pow(x, y))
。
当您将
pow
与变量一起使用时,其结果是 double
。分配给 int
会截断它,您会得到 99 而不是 99.9999999。
使用不带变量的
pow
会被编译器优化(这是在编译时计算的)。