Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
Register

## float的精度不太够,用double吧

Posted by c0500448242 at 2005-07-28 00:28:27 on Problem 2507
In Reply To:没道理呀，也是用二分 ，超时 Posted by:wangguanjin at 2005-07-28 00:11:52
```//另外,最好用while(down + 1e-5 < up)来判断结束
> 是不是 有那个测试数据超时呢？帮忙分析一下
> #include<stdio.h>
> #include<math.h>
>
> float f(float x,float y,float c,float L)
> {
> 	return (sqrt((y*y-L*L)*(x*x-L*L)))/(sqrt(x*x-L*L)+sqrt(y*y-L*L))-c;
> }
>
> int main()
> {
> 	float x,y,c;
> 	float down,min,up,temp,L,temp1;
> 	while(EOF!=scanf("%f %f %f",&x,&y,&c)){
> 		down=0.0;
> 		if(x<y) up=x;
> 		else up=y;
> 		min=(down+up)/2;
> 		L=min;
> 		temp=f(x,y,c,L);
>
> 		temp1=temp;
> 		if(temp1<0) temp1=-temp1;
> 		while(temp1>0.0001){
> 			if(temp<0) up=min;
>
> 			if(temp>0) down=min;
> 			min=(down+up)/2;
> 			L=min;
> 			temp=f(x,y,c,L);
>
> 			temp1=temp;
> 		    if(temp1<0) temp1=-temp1;
> 		}
> 		printf("%.3f\n",L);
>
>
> 	}
>
> 	return 0;
> }
> /*
>
> 30 40 10
> 12.619429 8.163332 3
> 10 10 3
> 10 10 1
>
> */
```

Followed by: