Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 12 kết quả

Đề tài: Cách tính căn bậc n của số thực x!

  1. #1
    Ngày gia nhập
    10 2011
    Bài viết
    2

    Mặc định Cách tính căn bậc n của số thực x!

    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

  2. #2
    Ngày gia nhập
    01 2011
    Bài viết
    11

    Đơn giản thôi bạn, căn bậc n đổi sang dạng mũ là 1/n, thay vì tính căn, ta tính mũ, dùng lệnh pow(x,n)(trong thư viện math.h)
    Code:
    #include <conio.h>
    #include <stdio.h>
    #include <math.h>
    int main(void){
       double a;
       float x,n;
       printf("Nhap vao x: ");
       scanf("%f",&x);
       printf("Nhap vao bac n: ");
       scanf("%f",&n);
       n=1/n;
    	a = pow(x,n);
    	printf("%f",a);
        getch();
    }
    Code tớ viết hơi vội, có gì sai thì góp ý nhé

  3. #3
    Ngày gia nhập
    10 2011
    Bài viết
    2

    trời công nhận mình ngu ghê có vậy mà ko nghĩ ra . 4 tháng sau khi thi ĐH xong ko đụng vào Toán riếc ngu luôn .
    Thanks bác nhiều nhé.

  4. #4
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Trích dẫn Nguyên bản được gửi bởi nekyvn Xem bài viết
    Đơn giản thôi bạn, căn bậc n đổi sang dạng mũ là 1/n, thay vì tính căn, ta tính mũ, dùng lệnh pow(x,n)(trong thư viện math.h)
    Code:
    #include <conio.h>
    #include <stdio.h>
    #include <math.h>
    int main(void){
       double a;
       float x,n;
       printf("Nhap vao x: ");
       scanf("%f",&x);
       printf("Nhap vao bac n: ");
       scanf("%f",&n);
       n=1/n;
    	a = pow(x,n);
    	printf("%f",a);
        getch();
    }
    Code tớ viết hơi vội, có gì sai thì góp ý nhé
    Code này mà vui tay nhập vào n= 0 cái là tèo luôn ^^. Trong khi x^0 == 1 với x!=0;

  5. #5
    Ngày gia nhập
    01 2011
    Bài viết
    11

    Hi, tớ chỉ code minh họa thuật toán cho bạn ấy hiểu thôi, tại có việc phải đi gấp nên code hơi ẩu, thanks đã góp ý

  6. #6
    Ngày gia nhập
    03 2010
    Nơi ở
    My Home
    Bài viết
    772

    Mặc định Cách tính căn bậc n của số thực x!

    Làm thế này đi:

    để tính Công thức toán học Latex (a > 0, a != 1) ta thầy:

    Công thức toán học Latex

    Trong trương hợp chẳng bít tính là sao cả thì gọi thẳng thư viện <math.h> như sau

    C Code:
    1. #include <math.h>
    2. #include <stdio.h>
    3. int main(int argc, char *argv[])
    4. {
    5.     double a = 9.2;
    6.     int n = 10;
    7.     printf("%lf ^ (1/%d) = %lf\n", a, n, exp((1.0 / n) * log(a)));
    8.     return 0;
    9. }
    Còn nếu muốn tính bằng tay cho lên skill thì cũng OK ta cần tính 2 hàm Công thức toán học Latex
    và hàm Công thức toán học Latex



    Dùng khai triển Taylor (MacLaurin) để tính là OK. Cái này đòi hỏi chút kiến thức giải tích và lý thuyết chuỗi hàm ngon ngon 1 chút.

    Công thức toán học Latex (a > 0, a != 1)

    Với trường hợp lũy thừa thì thì ban tự tính, tớ làm cho phần 2 số input là số thực:



    C Code:
    1. #include <stdio.h>
    2. #include <assert.h>
    3.  
    4.  
    5. #define _abs(x)          ((x > 0) ? (x) : (-x))
    6. #define epsilon         0.0000001
    7.  
    8. double _exp(double x)
    9. {
    10.     double result = 0.0;
    11.     double temp   = 1.0;
    12.     unsigned int i = 0;
    13.     do
    14.     {
    15.         result += temp;
    16.         temp   *= x / ++i;
    17.     }while(_abs(temp) > epsilon);
    18.     return result;
    19. }
    20. double log_temp(double x)
    21. {
    22.     assert(x > 0);
    23.     double result = 0.0;
    24.     double y = x - 1;
    25.     double temp_x = y;
    26.     double temp, temp_next ;
    27.     double remainder;
    28.     unsigned int  i = 1;
    29.     do
    30.     {
    31.         temp = temp_x / i;
    32.         result += temp;
    33.         temp_x *= -y;
    34.         temp_next = temp_x / ++i;
    35.         remainder = temp + temp_next;
    36.     }while(_abs(remainder) > epsilon);
    37.     return result;
    38. }
    39. double _log(double x)
    40. {
    41.     double u;
    42.     assert(x > 0);
    43.     if(x <= 1.0f)
    44.         return log_temp(x);
    45.     u = (x - 1.0) / (x + 1.0);
    46.     return log_temp(1.0 + u) - log_temp(1.0 - u);
    47. }
    48.  
    49. int main(int argc, char *argv[])
    50. {
    51.     double a = 9.2;
    52.     int n = 10;
    53.     printf("%lf ^ (1/%d) = %lf\n", a, n, _exp((1.0 / n) * _log(a)));
    54.     return 0;
    55. }
    Đã được chỉnh sửa lần cuối bởi namdq2k : 24-10-2011 lúc 02:07 PM.

  7. #7
    Ngày gia nhập
    10 2011
    Bài viết
    552

    ^
    Quả là giá trị, like mạnh :P

  8. #8
    Ngày gia nhập
    10 2011
    Bài viết
    2

    int main(int argc, char *argv[])
    cho em hỏi dòng này khai báo gì ạ =.=". Mấy anh thông cảm em mới học môn này có 2 tuần thôi

  9. #9
    Ngày gia nhập
    02 2010
    Bài viết
    113

    Trích dẫn Nguyên bản được gửi bởi Ninjakyo Xem bài viết
    int main(int argc, char *argv[])
    cho em hỏi dòng này khai báo gì ạ =.=". Mấy anh thông cảm em mới học môn này có 2 tuần thôi
    cái này út nghĩ nó liên quan đến tham số dòng lệnh
    argc: số lượng tham số nhận được vào từ dòng lệnh
    argv: mảng con trỏ kiểu char lưu các tham số dưới dạng chuỗi kí tự

  10. #10
    Ngày gia nhập
    10 2011
    Bài viết
    3

    Trích dẫn Nguyên bản được gửi bởi Ninjakyo Xem bài viết
    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
    Thử cái này xem sao. Các hàm _exp(x) và _log(x) viết dựa vào khai triển MacLaurin của e^x và ln(1 + x). Chú ý rằng khai triển của ln(1 + x) chỉ hội tụ trong miền -1 < x <= 1. Khi x > 1 thì sử dụng công thức ln(1 + x) = ln(1 + 1/x) - ln(1/x).
    C++ Code:
    1. #include <iostream>
    2. #include <limits>
    3.  
    4. using namespace std;
    5.  
    6. double _exp(double x)
    7. {
    8.     double s = 0, temp = 1;
    9.     unsigned k = 0;
    10.     while (s != s + temp)
    11.     {
    12.         s += temp;
    13.         k++;
    14.         temp *= x/k;
    15.     }
    16.     return s;
    17. }
    18.  
    19. double _log(double x)
    20. {
    21.     x = x - 1;
    22.     if (-1 < x && x <= 1)
    23.     {
    24.         double s = 0, temp = x;
    25.         unsigned k = 0;
    26.         while (s != s + temp)
    27.             {
    28.                 s += temp;
    29.                 k++;
    30.                 temp *= -x*k/(k+1);
    31.             }
    32.         return s;
    33.     }
    34.     else return _log(1 + 1/x) - _log(1/x);
    35. }
    36.  
    37. double sqrtn(double x, unsigned n)
    38. {
    39.     if (x == 0) return 0;
    40.     else
    41.         if (n%2)
    42.             if (x > 0) return _exp(_log(x)/n);
    43.             else return -_exp(_log(-x)/n);
    44.         else
    45.             if (x > 0) return _exp(_log(x)/n);
    46.             else return numeric_limits<float>::quiet_NaN();
    47. }
    48.  
    49. void main()
    50. {
    51.     double x; unsigned n;
    52.     x = 8; n = 3;
    53.     cout << "Can bac "<< n << " cua " << x << " bang " << sqrtn(x,n) << endl;
    54.     x = -8; n = 3;
    55.     cout << "Can bac "<< n << " cua " << x << " bang " << sqrtn(x,n) << endl;
    56.     x = 16; n = 2;
    57.     cout << "Can bac "<< n << " cua " << x << " bang " << sqrtn(x,n) << endl;
    58.     x = -16; n = 2;
    59.     cout << "Can bac "<< n << " cua " << x << " bang " << sqrtn(x,n) << endl;
    60. }

    Kết quả:
    Can bac 3 cua 8 bang 2
    Can bac 3 cua -8 bang -2
    Can bac 2 cua 16 bang 4
    Can bac 2 cua -16 bang -1.#IND

Các đề tài tương tự

  1. Căn hộ chung cư Times City căn hộ đẹp giá siêu rẻ, giao nhà ngay
    Gửi bởi ephat245 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 16-11-2012, 01:50 PM
  2. Chính chủ bán căn hộ chung cư xala CT8C căn số 02 và căn số 30
    Gửi bởi nguyenhabds trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 25-08-2012, 10:42 AM
  3. Chung cư green city, căn hộ 505 minh khai, căn góc, vị trí đẹp, giá ưu đãi
    Gửi bởi ephat_tt86 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 09-01-2012, 01:46 PM
  4. ! Chung cư lõi linh đàm, căn hộ green life căn VP4 diện tích 112.7m2. giá chênh thấp
    Gửi bởi ephat_tt86 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 20-12-2011, 08:53 AM
  5. ! Chung cư lõi linh đàm, căn hộ green life căn VP4 diện tích 112.7m2. giá chênh thấp
    Gửi bởi ephat_tt86 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 20-12-2011, 08:26 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn