上一篇提到的都是整數情況下的二分查詢問題,事實上二分法的應用遠遠不止此,下面介紹幾個相關的例子。
例1 :如何計算 的近似值?
對 來說,在 的範圍內, 是隨着 的增大而增大的,這就給二分法創造了條件,由於 是無理數,因此只能獲得它的近似值,這裏不妨以精度到 爲例來逼近 。
首先,令浮點型 left 和 right 的初值分別爲1和2,然後通過比較 left 和 right 的中點 mid 處 的數值與2的大小來選擇子區間進行逼近。有以下兩種情況:
(1)如果 ,說明 ,應當在 的範圍內繼續逼近,故令 。
(2)如果 ,說明 ,應當在 的範圍內繼續逼近,故令 。
當 時結束,此時已經滿足精度要求, 即爲所求的近似值。
具體實現代碼如下:
#include<stdio.h>
const double eps = 1e-5;
double f(double x) {
return x * x;
}
double calSqrt() {
double left = 1, right = 2, mid;
while(right - left > eps) {
mid = (left + right) / 2;
if(f(mid) > 2) {
right = mid;
}
else {
left = mid;
}
}
return mid;
}
int main(){
printf("%f", calSqrt());
return 0;
}
未完待續….