在运行以下代码行时:
int i,a;
for(i=0;i<=4;i++)
{
a=pow(10,i);
printf("%d\t",a);
}
看到输出我很惊讶,结果是1
10
99
1000
9999
而不是 1
10
100
1000
10000
。
可能的原因是什么?
注意
如果你认为上面的for循环中i = 2
时的 float 不准确,变量a
中存储的值是99
。
但是如果你改写
a=pow(10,2);
现在 a 的值为 100
。这怎么可能?
最佳答案
您已将a
设置为int
。 pow()
生成一个 float ,在某些情况下可能只是不到 100 或 10000 的一根头发(正如我们在这里看到的那样。)
然后将其填充到整数中,该整数截断为整数。所以你失去了那个小数部分。哎呀。如果您真的需要一个整数结果,舍入可能是执行该操作的更好方法。
即使在那里也要小心,对于足够大的幂,错误实际上可能大到仍然导致失败,给你一些你意想不到的东西。请记住, float 的精度有限。
关于c - pow 函数的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33329752/