资源限制
时间限制: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;
}