为什么pow(10,2)99而不是100的结果?

时间:2019-01-06 00:48:39

标签: c

我正在用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

1 个答案:

答案 0 :(得分:5)

pow(10, 2)产生的值略低于100,因为它是pow的低质量实现,无法返回良好的结果。

pow是难以实现的功能,所有商业实现都会产生许多在某种程度上不准确的结果。但是,良好的实现会努力使某些情况完全正确,包括结果恰好是整数(或者就此而言是有理数)的情况。

pow(base, exp)中,如果在编译时已知exp为2,则应改用base*base-它快速准确,并且避免了pow问题。如果在编译时不知道exp为2,则必须设计代码以容忍pow中的不正确之处,否则必须进行其他调整。 (可以针对具体情况或要求提供进一步的建议。)