C:我用pow(10,2)和pow(10,j)获得了不同的结果,j = 2;

Rim*_*nas 8 c floating-point pow

这个打印100:

int j=2;
int i= pow(10,2);  
printf("%d\n", i);
Run Code Online (Sandbox Code Playgroud)

这个打印99:

int j=2;
int i= pow(10,j);  
printf("%d\n", i);
Run Code Online (Sandbox Code Playgroud)

为什么?

R..*_*R.. 12

发生的事情是你有一个C实现,其标准库的实现质量非常低pow,即使在type(double)中可以表示确切的结果,也会返回不精确的结果.调用pow(10,2)似乎产生了下面的值100.0,当舍入到整数时,产生99.当参数不变时你没有看到这个的原因是编译器冒昧地优化了调用alltogether和replace它在编译时持续为100.

如果您的意图是执行整数幂,请不要使用该pow函数.写一个适当的整数幂函数,或者当指数已知时,直接写出乘法.