C++ 二进制搜索不收敛于双精度

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(

我必须找到一个数字的第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(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一旦达到可接受的公差。您已经在递归过程中打印了一些中间结果。您观察到了什么?请包括示例的输出