สมมติว่าเรามีจำนวนบวก n และความแม่นยำ p เราต้องหารากที่สองของจำนวน n ถึง p ตำแหน่งทศนิยมโดยใช้เทคนิคการค้นหาแบบไบนารี ดังนั้นหากตัวเลขคือ n =50 และ p =3 เอาต์พุตจะเป็น 7.071
แก้ปัญหานี้ เราต้องทำตามขั้นตอนบางอย่าง -
- เริ่มต้น start :=0 และ end :=n
- เปรียบเทียบกำลังสองของจำนวนเต็มกลาง ถ้านี่เท่ากับตัวเลข แสดงว่าได้ส่วนสำคัญแล้ว มิฉะนั้น ให้มองหาทางซ้ายหรือทางขวาตามที่ต้องการ
- เมื่อเราทำงานในส่วนปริพันธ์เสร็จแล้ว ให้ทำในส่วนที่เป็นเศษส่วน
- เริ่มต้นตัวแปรส่วนเพิ่มเป็น 0.1 จากนั้นคำนวณส่วนที่เป็นเศษส่วนสูงสุด p สำหรับการทำซ้ำแต่ละครั้งที่เพิ่มขึ้นจะเปลี่ยนเป็น 1/10 ของค่าก่อนหน้า
- สุดท้ายส่งคืนคำตอบ
ตัวอย่าง
#include<iostream>
using namespace std;
float sqrtBinarySearch(int num, int p) {
int left = 0, right = num;
int mid;
float res;
while (left <= right) {
mid = (left + right) / 2;
if (mid * mid == num) {
res = mid;
break;
}
if (mid * mid < num) {
left = mid + 1;
res = mid;
} else {
right = mid - 1;
}
}
float incr = 0.1;
for (int i = 0; i < p; i++) {
while (res * res <= num) {
res += incr;
}
res -= incr;
incr /= 10;
}
return res;
}
int main() {
int n = 50, p = 3;
cout << "Square root of " << n << " up to precision " << p << " is: " << sqrtBinarySearch(50, 3) << endl;
} ผลลัพธ์
Square root of 50 up to precision 3 is: 7.071