算法提高 7-2求arccos值
时间限制:10.0s 内存限制:256.0MB
问题描述
利用标准库中的cos(x)和fabs(x)函数实现arccos(x)函数,x取值范围是[-1, 1],返回值为[0, PI]。要求结果准确到小数点后5位。(PI = 3.1415926)
提示:要达到这种程度的精度需要使用double类型。
样例输入
0.5
样例输出
1.04720
数据规模和约定
-1 <= x <= 1, 0 <= arccos(x) <= PI。
分析:根据题意是通过cos来逆向求arccos的值,所以按照惯例采用二分法求解,由于是double类型不存在相等,只要差的绝对值足够小,就可以认为是最终结果了。
#include <iostream>
#include <cmath>
#define PI 3.1415926
using namespace std;
int main()
{
double x;
cin >> x;
double i = 0, j = PI;
double result = (i + j) / 2;
double judge = cos(result) - x;
double temp;
while(fabs(judge) > 0.000000000000002)
{
result = (i + j) / 2;
temp = cos(result);
if(temp > x) i = result;
else j = result;
judge = cos(result) - x;
}
printf("%.5lf\n", result);
return 0;
}