我正在用c创建一个新项目,函数pow“不起作用”。该怎么办?
它实际上以2的10的幂起作用,而以10的1的幂出现99。
#include <stdio.h>
#include <math.h>
int main(){
int res=2;
int base=10;
int exp=2;
res= pow(base,exp);
printf("%d",res);
return 0;
}
我希望输出为100,但输出为99
答案 0 :(得分:5)
pow(10, 2)
产生的值略低于100,因为它是pow
的低质量实现,无法返回良好的结果。
pow
是难以实现的功能,所有商业实现都会产生许多在某种程度上不准确的结果。但是,良好的实现会努力使某些情况完全正确,包括结果恰好是整数(或者就此而言是有理数)的情况。
在pow(base, exp)
中,如果在编译时已知exp
为2,则应改用base*base
-它快速准确,并且避免了pow
问题。如果在编译时不知道exp
为2,则必须设计代码以容忍pow
中的不正确之处,否则必须进行其他调整。 (可以针对具体情况或要求提供进一步的建议。)