pow(10, 2) 和pow(10, i)得到不同的结果

 1. 问题描述

代码1:

    int num = pow(10, 2);
    printf("%d\n", num);

打印结果1:

代码2: 

    int i=2;
    int num = pow(10, i);
    printf("%d\n", num);

打印结果2:

 2. 原因分析

你有一个C实现,它的标准库有一个非常低质量的pow实现,即使精确结果可以用类型( double )表示,它也返回不精确的结果。 对pow(10,2)的调用似乎产生了刚好低于100.0的值,当四舍五入为整数时,得到99.当参数不变时,你没有看到这一点的原因是编译器冒昧地在编译时将所有调用全部优化并用常量100替换。

如果你的意图是做整数幂,不要使用pow函数。 写一个适当的整数幂函数,或者当指数已知时,直接写出乘法运算。

引用自:C:我用pow(10,2)和pow(10,j)得到了不同的结果,j = 2;(C: i got different results with pow(10,2) and pow(10,j), j=2;)_电脑培训

猜你喜欢

转载自blog.csdn.net/CH_whale/article/details/121317142
pow
今日推荐