คำอธิบาย
เขียนฟังก์ชันคำนวณรากที่สองของตัวเลขโดยไม่ใช้ Math.sqrt() ใช้วิธี Binary Search
ตัวอย่างโค้ด
const square = (n, i, j) => {
let mid = (i + j) / 2;
let mul = mid * mid;
if ((mul === n) || (Math.abs(mul - n) < 0.00001)) {
return mid;
} else if (mul < n) {
return square(n, mid, j);
} else {
return square(n, i, mid);
}
};
const findSqrt = num => {
let i = 1;
while (true) {
if (i * i === num) {
return i;
} else if (i * i > num) {
let res = square(num, i - 1, i);
return res;
}
i++;
}
};
console.log(findSqrt(33));
การทำงาน
- หา i ที่ i*i มากกว่า num
- รากที่สองอยู่ระหว่าง i-1 และ i
- ใช้ Binary Search หาค่าที่แม่นยำ
ผลลัพธ์
5.744562149047852