C++ 二进制搜索不收敛于双精度
我必须找到一个数字的第n个根,它通过了一些测试用例,但失败了一些 当x=0.09和n=3时,我得到的ans为0.09 但预计为0.448140475。 我不明白为什么bs不工作,请帮忙C++ 二进制搜索不收敛于双精度,c++,binary-search,C++,Binary Search,我必须找到一个数字的第n个根,它通过了一些测试用例,但失败了一些 当x=0.09和n=3时,我得到的ans为0.09 但预计为0.448140475。 我不明白为什么bs不工作,请帮忙 #include <iostream> #include <vector> #include<algorithm> #include<iomanip> #include<cmath> using namespace std; double solve(
#include <iostream>
#include <vector>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;
double solve(double x, int n){
int iter=200;
double low=0;
double high=x;
while(iter--){
double mid = (low+high)/2;
double val = pow(mid,n);
cout<<val<<endl;
if(val<x)low=mid;
else high=mid;
}
return low;
}
int main() {
// int t--;
int t;
cin>>t;
while(t--){
double x;
cin>>x;
int n;
cin>>n;
cout<<fixed<<setprecision(12)<<solve(x,n)<<endl;
}
return 0;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
双解算(双x,整数n){
int-iter=200;
双低=0;
双高=x;
而(国际热核实验堆--){
双中=(低+高)/2;
双val=功率(中间,n);
cout>n;
cout首先,我想你是在尝试使用二分法,而不是二进制搜索
其次,从数学角度来看,为了找到实际根,初始的二等分域应该从一开始就包含根。但是,您的二等分域太小,无法包含实际根。(对于0首先,我假设您正在尝试使用二等分法,而不是二进制搜索
其次,从数学的角度来看,为了找到实际的根,初始的二等分域应该从一开始就包含根。但是,二等分域太小,无法包含实际的根。(对于0,我认为是数值不稳定,一旦达到可接受的公差,您就应该返回该循环。您已经在递归期间打印了一些中间结果。您观察到了什么?请包括示例的输出对于我来说是数值不稳定,您真的应该返回该loop一旦达到可接受的公差。您已经在递归过程中打印了一些中间结果。您观察到了什么?请包括示例的输出