Bài này mình sẽ hướng dẫn các bạn mới học lập trình cách để tính căn bậc n với n là một số bất kỳ nhé, nhưng n >= 2 nha. Chỉ là chỉ lại giúp các bạn nhớ lại toán học thôi ^^.
Một số thắc mắc của các bạn sinh viên:
- Tình hình là em đang bí trong cách tính căn bậc n của 1 số. Thực tình em mới học môn này được 2 tuần nên thực tình ko biết giải quyết thế nào, ai biết phép toán của nó ra sao thì giúp em với?
- Trong C chỉ có hàm sqrt để tính căn bậc 2, vậy nếu em muốn tính căn bậc 3 hay căn bậc n của một số thì làm thế nào ạ?
Tính căn bậc 3 trong C/C++
Để tính căn bậc 3 trong C/C++, bạn sử dụng công thức toán học sau. Công thức này đúng với căn bậc n luôn nhé. Bạn có thể áp dụng để tính căn bậc n của số bất kỳ:
Như vậy, với một số x = 8 chẳng hạn, bạn muốn tính căn bậc 3 của 8. Khi đó, trong công thức trên x = 8, n = 3, m = 1. Vậy ta sẽ phải tính x1/3
Để tính ax trong C/C++, chúng ta có thể sử dụng hàm pow() có cú pháp như sau:
double pow (double base, double exponent);
Ví dụ dưới đây sử dụng C/C++ để tính căn bậc 3 của 8 theo cách trên. Các bạn lưu ý em kiểu cho số mũ nhé. Vì 2 số nguyên chia cho nhau sẽ chỉ ra giá trị nguyên(1/3 = 0).
#include <stdio.h> #include <math.h> int main () { int a = 8; printf("%f", pow(a, 1.0/3)); }
Kết quả: 2.000000
Như vậy, để tính căn bậc n của số a, bạn sẽ dùng hàm pow để tính kết quả của phép tính a1/n
Tính căn bậc 3 không dùng hàm pow
Để tính căn bậc 3 của 1 số dương a ( tổnq quát căn bậc n ), ta phải xây dựng một chuỗi ( toán học ) mà chuỗi này hội tụ về căn bậc 3 của a. Sau đó lặp hữu hạn 1 số lần để được kết quả với độ chính xác nào đó chấp nhận được. Sau day la chuong trinh trong C de thuật tính căn bậc 3 cua 2 voi độ chính xác 0.00000001 chỉ bằng các phép toán +, – , *, / mà thôi.
Dưới đây là lời giải tính căn bậc 3 của 2 của một thành viên trong Cộng đồng C Việt:
//////////////////////////////////////////////////////////////////////// // Cube root of 2 by Nguyen Van Noi - DHTG // Email : [email protected] /////////////////////////////////////////////////////////////////////// #include <stdio.h> double myabs(double x) { return ((x>=0)?x:(-x)); } void main() { double a=2.0, xo, xn=1, e=1e-8; do { xo=xn; xn=(a/xo/xo+2.0*xo)/3.0; } while (myabs(xn-xo)>e); printf("Can bac 3 cua 2 = %1.8fn",xn); }
Một lời giải khác do mình tổng hợp:
Ý tưởng: Tìm phần nguyên trước, sau đó tìm phần thập phân.
Với cách làm này, bạn chỉ thu được kết quả xấp xỉ với đáp án chính xác. Độ chính xác phụ thuộc vào giá trị precision
mà bạn mong muốn.
#include <stdio.h> double cubeRoot(double n) { double i, precision = 0.000001; for(i = 1; (i*i*i) <= n; ++i); //tim phan nguyen for(--i; (i*i*i) < n; i += precision); //tim phan thap phan return i; } int main() { int n = 125; printf("Can bac ba cua %d = %lf", n, cubeRoot(n)); return 0; }
Chạy thử:
Can bac 3 cua 125 = 5.000000
Để lại một bình luận