有关c++函数问题

来源:百度知道 编辑:UC知道 时间:2024/06/02 01:25:29
double arctan(double x) //=x-(x^3/3)+(x^5/5)-(x^7/7)+(x^9/9)-....
{
int i;
double r,e,f,sqr;
sqr=x*x;
r=0; e=x; i=1;
while(e/i>1e-15)
{
f=e/i;
r=(i%4==1)?r+f:r-f;
e=e*sqr;
i=i+2;
}
return r;
}
能帮我画下这个函数的流程图么 ?
那个 f=e/i
e and f 都是 double 类型的
i是整型的
为什么不用强制类型转换呢 ?

首先,baidu知道里是没办法画图的……流程用语言表达还不如看代码来的清楚……

这个是求反正切三角函数的算法,1e-15是阀值,用来控制算法结果的精度。当e/i大于这个阀值的时候,程序循环计算r的值,当条件不满足时返回。

关于类型转换:

f=e/i中,编译器默认为等式右边的两个数按精度较高的类型进行转换,因此等式右边的转换结果为double型。
如果等式左边的精度比等式右边的低,比如:
int tmp = e/i;
编译时会收到一个警告,告诉我们这样赋值可能会损失精度。此时我们应该进行强制的类型转换。