exs*_*ake 23 c math.h c-standard-library
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int n,i,ele;
n=5;
ele=pow(n,2);
printf("%d",ele);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是24
.
我在Code :: Blocks中使用GNU/GCC.
怎么了?
我知道pow
函数返回一个double
,但是25
适合一个int类型所以为什么这个代码打印24
而不是25
?如果n=4; n=6; n=3; n=2;
代码有效,但有五个代码没有.
Pau*_*zie 25
这是可能发生的事情.您应该能够通过查看编译器的pow
函数实现来确认这一点:
假设你有正确的#include,(所有以前的答案和评论都是正确的 - 不要认为#include
文件是理所当然的),标准pow
函数的原型是这样的:
double pow(double, double);
而你这样打电话pow
:
pow(5,2);
该pow
函数通过算法(可能使用对数),因此使用浮点函数和值来计算功率值.
该pow
函数没有通过一个天真的"乘以n倍的xa总和的值",因为它还必须pow
使用小数指数计算,并且你不能用这种方式计算分数幂.
因此,pow
使用参数5和2 的计算很可能导致轻微的舍入误差.当您分配给a时int
,您截断了小数值,因此产生24.
如果你使用整数,你也可以编写自己的"intpow"或类似的函数,只需将值乘以必要的次数即可.这样做的好处是:
您将不会遇到使用时可能会出现细微舍入错误的情况pow
.
你的intpow
函数很可能比同等的调用运行得更快pow
.