资源限制 时间限制:10.0s 内存限制:256.0MB 问题描述 利用标准库中的cos(x)和fabs(x)函数实现arccos(x)函数,x取值范围是[-1, 1],返回值为[0, PI]。要求结果准确到小数点后5位。(PI = 3.1415926) 提示:要达到这种程度的精度需要使用double类型。 样例输入 0.5 样例输出 0.5 1.04720
解题思路: 求arccos的过程就是求cos的逆过程,也就是x未知,cosx已知求x,那么我们可以采用二分法试出来,对未知的x进行cos与输入的值相减,如果逼近0,说明未知的x的值就是此时试出来的值,代码如下:
#include<bits/stdc++.h>
#define PI 3.1415926
using namespace std
;
int main(){
double result
, l
, r
, x
;
cin
>> x
;
l
= 0;
r
= PI
;
result
= (l
+ r
) / 2;
while(fabs(cos(result
) - x
) > 0.000000000001)
{
if(cos(result
) - x
> 0){
l
= result
;
}else{
r
= result
;
}
result
= (l
+ r
) / 2;
}
cout
<<setiosflags(ios
::fixed
)<<setiosflags(ios
::right
)<<setprecision(5);
cout
<< result
;
return 0;
}