C++二分查找方式实现sqrt功能

#include <iostream>
#include <cmath> // 用于比较标准库中的sqrt结果

double binarySearchSqrt(double x) {
    if (x < 0) {
        // 负数没有实数平方根,根据需求可以返回特定值或抛出异常
        return -1;
    }
    if (x == 0 || x == 1) {
        // 0和1的平方根就是它们本身
        return x;
    }

    double left = 0, right = x; // 初始区间为[0, x]
    double precision = 1e-7; // 设置精度

    while (right - left > precision) {
        double mid = left + (right - left) / 2;
        double mid_squared = mid * mid;

        if (std::fabs(mid_squared - x) < precision) {
            // 如果mid的平方已经非常接近x,则直接返回mid
            return mid;
        } else if (mid_squared < x) {
            // 如果mid的平方小于x,则解在[mid, right]区间内
            left = mid;
        } else {
            // 如果mid的平方大于x,则解在[left, mid]区间内
            right = mid;
        }
    }

    // 返回区间[left, right]内的任意一个值作为近似解,这里选择返回left
    return left;
}

int main() {
    double num = 25.0;
    double result = binarySearchSqrt(num);
    std::cout << "The square root of " << num << " is approximately " << result << std::endl;
    std::cout << "Using cmath sqrt: " << std::sqrt(num) << std::endl;

    return 0;
}

Add a Comment

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据