二进制搜索不收敛 double

Binary search not converging for double

我必须找到一个数的 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;
}

首先,我假设您正在尝试使用二分法,而不是二进制搜索。

其次,从数学的角度来看,为了找到真正的根,初始二分域应该从一开始就包含根。但是,您的二分域太小,无法包含实际的根。 (对于0

最后,在我看来,这个 post 必须移动到处理数值分析问题的堆栈交换。 (有一个计算科学堆栈交换。)