poj1905

#include <iostream>
#include <iomanip>
#include <math.h>
#include <queue>
#define ll long long
using namespace std;
const double esp=1e-6;

int main()
{
	double L,n,c;
	double r;
	while(cin>>L>>n>>c)
	{
		if (L<0&&n<0&&c<0)
		break;
		double low=0.0,high=0.5*L,mid,h=0;
		double s=(1+n*c)*L,mid_s;
		while(high-low>esp)
		{
			/*
			r=(4*h^2+L^2)/(8*h)
			s=2r*arctan(L/2*r)
			*/
			mid=(low+high)/2;
			r=(4*mid*mid+L*L)/(8*mid);
			mid_s=2*r*asin(L/(2*r));

			if (s>mid_s)//弧长比我们猜测的长度大,说明h小了
				low=mid;
			else
				high=mid;
		}
		 h=mid;
		cout<<fixed<<setprecision(3)<<h<<endl;
		/*浮点输出应该以固定点或小数点表示法显示.
		fixed 操作符可能最重要的还是当它与 setprecision 操作符一起使用时,
		setprecision 即可以以一种新的方式显示。
		它将指定浮点数字的小数点后要显示的位数,而不是要显示的总有效数位数。
		也可以直接printf表示
		*/
	}

	return 0;
}
/*
扇形弧长L=arcsin(弦长/2*r)*2*r
=arcsin(弦长/2r)*pi*r/90;
arcsin怎么算:
因为sin(-pi/2)=-1,所以arcsin(-1)=-pi/2;
因为cos(2pi/3)=-1/2,所以arccos(-1/2)=2pi/3

r=(4h^2+L^2)/(8*h)
s=2r*arctan(L/2r)
*/

/*
math常用函数:
double ceil(double x)
返回不小于参数x的最小整数值,结果返回double形。
sin,cos,tan
asin:反正弦值
acos:反余弦函数数值
exp: 计算以e为底的x次方值,即ex值,然后将结果返回

*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值