使用二分查找法(Binary Search)来计算一个正数的平方根,可以通过迭代地缩小搜索区间来逼近目标值。以下是使用二分查找法实现求平方根的C++代码:
```cpp
#include <iostream>
double binarySearchSqrt(double target, double epsilon = 1e-10) {
if (target < 0) {
throw std::invalid_argument("Cannot compute the square root of a negative number.");
}
double low = 0.0;
double high = std::max(1.0, target); // 确保high至少为1,以防target小于1
double mid;
while (high - low > epsilon) {
mid = (high + low) / 2.0;
double midSquared = mid * mid;
if (midSquared > target) {
high = mid;
} else {
low = mid;
}
}
return low;
}
int main() {
double number;
std::cout << "Enter a number: ";
std::cin >> number;
try {
double result = binarySearchSqrt(number);
std::cout << "The square root of " << number << " is approximately " << result << std::endl;
} catch (const std::invalid_argument& e) {
std::cerr << "Error: " << e.what() << std::endl;
}
return 0;
}
```
在这个实现中,`binarySearchSqrt`函数接受一个目标值`target`和一个可选的精度`epsilon`。函数首先检查目标值是否为负数,如果是,则抛出异常。然后,函数初始化搜索区间的两端`low`和`high`,对于`high`,如果`target`小于1,那么`high`被设为1,否则`high`被设为`target`本身。
在循环中,函数计算区间的中点`mid`,并检查`mid`的平方是否大于、等于或小于`target`。根据比较结果,调整搜索区间。循环将继续,直到搜索区间的宽度小于`epsilon`,此时认为找到了足够接近的平方根。
最后,在`main`函数中,用户输入一个数字,调用`binarySearchSqrt`函数计算其平方根,并输出结果。如果输入的是负数,程序会捕获异常并输出错误信息。
请注意,这个方法适用于正数,对于非常大的数字或非常接近零的数字,可能需要调整初始的`low`和`high`值以提高算法的效率和准确性。