蓝桥杯 adv222 7-2求arccos值

蓝桥杯 adv222 7-2求arccos值

问题描述

利用标准库中的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。

参考解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <stdio.h>
#include <cmath>

#define Threshold 0.000001

using namespace std;

double arccos(double x) {
// 二分查找
double x_hat, l = 0, r = 3.1415926;
// 浮点数直接比较大小会出错,故用减法,题目要求保留5位,那么阈值设为6位
while (r - l > Threshold) {
double mid = (r + l) / 2;
x_hat = cos(mid);
if (x_hat == x)
return mid;
else if (x_hat > x)
l = mid;
else
r = mid;
}
return l;
}

int main() {
double x;
cin >> x;
printf("%.5f", arccos(x));
return 0;
}

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×