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
函数。 写一个适当的整数幂函数,或者当指数已知时,直接写出乘法运算。