蓝桥杯 ADV-222 7-2求arccos值

  算法提高 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版权协议,转载请附上原文出处链接和本声明。