Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Từ 1 tới 8 trên tổng số 8 kết quả

Đề tài: cho em hỏi 1 chút về hàm log trong C

  1. #1
    Ngày gia nhập
    04 2008
    Bài viết
    6

    Mặc định cho em hỏi 1 chút về hàm log trong C

    anh chị ui em cần tính log cơ số 2 của n thì em phải viết thế nào để C làm được anh chị có thể giúp em chút được hông
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

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

    - Bạn test lại xem đúng ko!

    Log 2 n = log(n)/log(2)

  3. #3
    Ngày gia nhập
    12 2007
    Bài viết
    224

    hay quá , với cách này ta có thể làm cho bất kỳ log của cơ số nào .

  4. #4
    No Avatar
    BeginnerChicken Khách

    Vậy còn hiện thực hàm log (tức là không được include bất kì thư viện nào)! Anh nào gợi ý cho em với.

  5. #5
    Ngày gia nhập
    10 2007
    Nơi ở
    HCM
    Bài viết
    46

    Trích dẫn Nguyên bản được gửi bởi BeginnerChicken Xem bài viết
    Vậy còn hiện thực hàm log (tức là không được include bất kì thư viện nào)! Anh nào gợi ý cho em với.
    tức là bạn muốn xây dựng 1 hàm log cho riêng mình đúng ko nè. Nếu vậy, bạn kiếm quyển toán học cao cấp, trong đó có định lí Mac Laurin cho phép khai triển 1 hàm số thành tổng các đa thức và hầu như quyển sách nào cũng có ví dụ về bài này khai triển ln(1+x). Khi đã có được ln thì việc tính log cơ số bất kỳ là hoàn toàn có thể
    Đã được chỉnh sửa lần cuối bởi halohcm : 01-11-2008 lúc 09:37 PM.

  6. #6
    No Avatar
    BeginnerChicken Khách

    Mặc định cho em hỏi 1 chút về hàm log trong C

    Đây là code hiện thực theo cách của sách toán 1. Nhưng chạy rất chậm. Không đạt yêu cầu đặt ra.
    Công thức của hàm ln:

    ln(1 + x) = x - x^2/2 + x^3/3 -... + (-1)^(n-1)x^n/n

    PHP Code:
    double pow(double base,int exp){
        
    double result 1;
        for (
    int i=0;i<abs(exp);i++)
            
    result *= base;
        
    result = (exp>=0)?result:(double)1/result;
        return 
    result;
    }

    double ln(double n){
        
    double x n-1;
        
    double result 0;
        for (
    int i=1;i<=9999;i++){
            
    result += pow(-1,(i+1)%2)*pow(x,i)/i;
        }
        return 
    result;

    Có ai có phương pháp khác hoặc cải tiến phương pháp này không?

  7. #7
    Ngày gia nhập
    09 2007
    Bài viết
    724

    Tại sao lại cứ phải tính lại hàm mũ của x nhỉ sao không dùng lại của bước trước mà phải dùng lại làm gì. chậm là do hàm pow của bạn gọi nhiều quá.


    cải tiến lại như sau:

    C Code:
    1.  
    2. double ln(double n) // viết hàm tính ln (n)
    3. {
    4.    double tong = n-1;
    5.    double x = tong;
    6.    int flag = -1;
    7.   if(n == 1.0) // với các phép so sánh này để chính xác các bạn nên define một giá trị Epsilon để so sánh.
    8.   {  //  tu 1 tro xuong
    9.          return 0;
    10.   }
    11.   if(n <= 0.0)
    12.        return -1; // khong co log nay
    13.  
    14.    for(int i=2; i<9999; i++) // tại sao ở đây lại lấy số 9999 nhỉ ????
    15.    {
    16.         tong += (flag*x) / i ;
    17.         x*=x; // cứ một lần lũy thừa của x lại tăng lên 1.
    18.         flag*=-1; // thay đổi dấu cho lần lặp tiếp theo
    19.    }
    20.    return tong;
    21. }

    Mình mới code các bạn chạy xem thử sao, nhưng đảm bảo là nhanh hơn code của bạn Beginerchicken
    Đã được chỉnh sửa lần cuối bởi zkday2686 : 02-11-2008 lúc 04:28 PM.

  8. #8
    No Avatar
    BeginnerChicken Khách

    Công thức đó chỉ đúng khi n-> vô cực. Đó chính là lý do em lấy số 9999 nhưng như các bạn thấy 9999 vãn chưa đáp ứng được yêu cầu về độ chính xác. phải là một số rất lớn mới okie.
    Nhưng em không làm này nữa. Cảm ơn các anh đã quan tâm.
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

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

  1. Chút phong cách ý trong từng giọt bia peroni
    Gửi bởi thanhlamtl 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: 26-04-2013, 10:50 AM
  2. Cho mình hỏi chút về checkedlistbox trong winform
    Gửi bởi hoanghieu883 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 4
    Bài viết cuối: 14-05-2010, 11:35 PM
  3. Một chút thắc mắc về hàm trong C
    Gửi bởi dokyan1989 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 27-03-2009, 11:32 AM
  4. Cho mình hỏi về bắt bàn phím chút
    Gửi bởi ddhung trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 10-02-2009, 09:53 PM
  5. Cho mình hỏi chút về hàm thời gian trong C
    Gửi bởi iamvtn trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 9
    Bài viết cuối: 25-11-2008, 10:00 PM

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