Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ค้นหารากที่สองของตัวเลขไม่เกินความแม่นยำที่กำหนดโดยใช้การค้นหาแบบไบนารีใน C++


สมมติว่าเรามีจำนวนบวก 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