2025年3月13日
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;
}