二分法求函数的零点

#include <cmath>
#include <cstdio>

bool check(long double mid);

int main(void)
{
	long double l = 1.5, r = 2.4;
	
	while (l + 10e-8 < r)
	{
		long double mid = l + (r - l) / 2.0;
		
		if (check(mid))
		{
			l = mid;
		}
		else
		{
			r = mid;
		}
	}
	
	printf("%.6Lf", l);
	
	return 0;
}

bool check(long double mid)
{
	return abs(pow(mid, 5) - 15 * pow(mid, 4) + 85 * pow(mid, 3) - 225 * pow(mid, 2) + 274 * mid - 121) > 0;
}

点赞 投币 收藏
1 个赞

题目是什么/

1 个赞

或题面

1 个赞

不用了

1 个赞

1 个赞

你这个有很多错误啊

1 个赞
#include<bits/stdc++.h>
using namespace std;
int n,m,a[100005];
double f(double x){
	return x*x*x*x*x-15*x*x*x*x+85*x*x*x-225*x*x+274*x-121;
}
signed main(){
	double l=1.5,r=2.4;
	while(l+0.000001<r){
		double mid=(l+r)/2.0;
		if(f(mid)<0){
			r=mid;
		}else{
			l=mid;
		}
	}
	printf("%.6lf",r);
}
1 个赞

check错了

1 个赞

abs(a)>0

1 个赞

check函数里不用套abs
开头改成#include<bits/stdc++.h>
using namespace std;
没必要用long double

你这个while判断里精度太小了

没事的,double万能

可是真的有问题啊

1 个赞

还是严谨小心点好

1 个赞

你傻啊,导入不需要的头文件会降低程序的运行速度,还会占用内存空间!

1 个赞

我从来不用 using namespace std,有可能导致撞标识符

1 个赞

大佬你用什么?

好吧,那对不起了

1 个赞

但check里绝对不能用abs

1 个赞
#include<bits/stdc++.h>
using namespace std;
int main() {
	cout<<"1.849016";
    return 0;
}
2 个赞