算法提高 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 <= x <= 1, 0 <= arccos(x) <= PI。
分析:二分法求值,需要注意判断浮点数相等的条件应是差的绝对值小于某数,某数由题目要求的精度来确定。
代码:
#include<iostream>
#include<cmath>
#define pi 4 * atan(1.0)
#define e 1e-11
using namespace std;
double arccos(double x, double a, double b) {
double mid = (a + b) / 2;
double cosmid = cos(mid);
if (fabs(cosmid - x) <= e) {
return mid;
}
if (x >= cosmid) {
return arccos(x, a, mid);
} else {
return arccos(x, mid, b);
}
}
int main() {
double x;
cin >> x;
printf("%.5lf\n", arccos(x, 0, pi));
return 0;
}
版权声明:本文为g28_gwf原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。