高精度二分搜索

#include<iostream>

#include<cstring>

#include<cstdio>

#include<cmath>

using namespace std;

double f[20];

int n;

double deal(double mid)

{

	double sum=0;

	for(int i=0;i<=n;i++)

	sum+=f[i]*pow(mid,n-i);

	return sum;

}

int main()

{

	

	while(scanf("%d",&n)>0&&n)

	{

		

		for(int i=0;i<=n;i++)

		scanf("%lf",&f[i]);

		double left=-1,right=1,mid;

		while(right-left>1e-6)

		{

			mid=(left+right)/2;

			if(deal(mid)>=0)

				left=mid;

			else

			right=mid;

		}

		printf("%.2lf\n",left-1.0);

	}

	return 0;

} 

 

你可能感兴趣的:(搜索)