資源限制
時間限制: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;
}