c - pow 函数的奇怪行为

标签 c pow

在运行以下代码行时:

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 设置为intpow() 生成一个 float ,在某些情况下可能只是不到 100 或 10000 的一根头发(正如我们在这里看到的那样。)

然后将其填充到整数中,该整数截断为整数。所以你失去了那个小数部分。哎呀。如果您真的需要一个整数结果,舍入可能是执行该操作的更好方法。

即使在那里也要小心,对于足够大的幂,错误实际上可能大到仍然导致失败,给你一些你意想不到的东西。请记住, float 的精度有限。

关于c - pow 函数的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33329752/

相关文章:

java - 带线程的格乘,效率更高吗?

c - 1 除以非常大的数返回 0, C

c - 为什么变量 b 在 for 循环中没有改变?

c++ - 电源功能未按预期工作

python - 在 DolphinDB 中生成连续幂向量的快速方法

java - Java有指数运算符吗?

java - Java语言的Android EMI计算器: Not resulting correct as Math. pow给出了非常大的数字

java - c srand 和 rand 的奇怪用法

c++ - 数组内存位置

c++ - 快速计算 n 次 10 的负 m 次方