Từ 1 tới 7 trên tổng số 7 kết quả

Đề tài: tính số pi với độ chính xác epsilon

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

    Post tính số pi với độ chính xác epsilon

    Dùng vòng while hoặc do Công thức toán học Latex while để tính số Công thức toán học Latex theo công thức:
    Công thức toán học Latex
    với độ chính xác Công thức toán học Latex nhập từ bàn phím. Khi đó ta sẽ có số Công thức toán học Latex với sai số Công thức toán học Latex khi i đủ lớn để:
    Công thức toán học Latex
    em code thế này
    #include<stdio.h>
    #include<conio.h>
    #include<math.h>
    void main()
    {
    float s=1,epsilon;
    long i=1;
    clrscr();
    printf("Nhap so epsilon<1:");scanf("%f",&epsilon);
    while (1.0/(2*i+1)>=epsilon)
    {
    s=s+pow(-1,i)/(2*i+1);
    i++;
    }
    printf("\nGia tri cua pi la %f",s*4);
    printf("\nSo lan thuc hien vong lap la %ld",i-1);
    getch();
    }
    theo em hiểu sai số Công thức toán học Latex có nghĩa là quá trình dừng lại khi Công thức toán học Latex
    nhưng

    nó lại không tính Công thức toán học Latex vào
    nhờ các anh chị sửa dùm code với ạ
    Attached Thumbnails Attached Thumbnails C.JPG  

  2. #2
    Ngày gia nhập
    11 2010
    Nơi ở
    Black Hole
    Bài viết
    826

    ko có 1/5 là đúng rồi, lần lập có 1 mà lấy đâu ra 1/5= 1/(2*2+1)
    thứ 2 :
    điều kiên : epsilon > 1/(2*i+1)
    đến khi code : while (1.0/(2*i+1)>=epsilon)
    kết quả ra sao đúng.

    Mình ko biết phép tính pi như thế nào nhưng cái kiểu làm như thế thì ko bao giờ có kết quả đúng

  3. #3
    Ngày gia nhập
    04 2010
    Bài viết
    1,537

    Bài này có hai điểm sai chính:

    1. Tính như vầy : pow(-1,i) : mệt lắm
    Người ta mở đầu bằng số 1 rồi cứ mỗi vòng lại nhân -1. Hoặc dùng cờ ngả bên dương qua âm và ngược lại.

    2. Con số 1/(2n+i) tính hai lần. Toán số thực tính rất tốn kém, tránh càng nhiều càng tốt.

    Trong code này, thay vì tính i = 0, 1, 2, 3, .... và n = 2i+1
    ta tính thẳng n = 1, 3, 5, ....

    C Code:
    1. double e = 1.0E-5;
    2. double pi = 0.0, x;
    3. int n = 1;
    4. int am = 0;
    5. while (1) {
    6.   x = 1.0/n;
    7.   if (x < e) break;
    8.   pi += (am)? -x : x;
    9.   am = !am;
    10.   n += 2;
    11. }
    12. pi *= 4;

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

    Trích dẫn Nguyên bản được gửi bởi clamvn Xem bài viết
    ko có 1/5 là đúng rồi, lần lập có 1 mà lấy đâu ra 1/5= 1/(2*2+1)
    thứ 2 :
    điều kiên : epsilon > 1/(2*i+1)
    đến khi code : while (1.0/(2*i+1)>=epsilon)
    kết quả ra sao đúng.

    Mình ko biết phép tính pi như thế nào nhưng cái kiểu làm như thế thì ko bao giờ có kết quả đúng
    cho Công thức toán học Latex càng nhỏ thì Công thức toán học Latex càng chính xác

    quá trình dừng lại khi Công thức toán học Latex nghĩa là điều kiện tiếp tục của vòng lặp là Công thức toán học Latex
    Công thức toán học Latex phải tính thêm giá trị Công thức toán học Latex chứ nhỉ
    Attached Thumbnails Attached Thumbnails C.JPG  

  5. #5
    Ngày gia nhập
    11 2010
    Nơi ở
    Black Hole
    Bài viết
    826

    uh
    Lúc đánh đang nghĩ thuật toán,ko để ý dk của while
    sorry sorry

  6. #6
    Ngày gia nhập
    03 2011
    Bài viết
    12

    Mặc định tính số pi với độ chính xác epsilon

    Trích dẫn Nguyên bản được gửi bởi neo.one Xem bài viết
    Dùng vòng while hoặc do Công thức toán học Latex while để tính số Công thức toán học Latex theo công thức:
    Công thức toán học Latex
    với độ chính xác Công thức toán học Latex nhập từ bàn phím. Khi đó ta sẽ có số Công thức toán học Latex với sai số Công thức toán học Latex khi i đủ lớn để:
    Công thức toán học Latex
    em code thế này

    theo em hiểu sai số Công thức toán học Latex có nghĩa là quá trình dừng lại khi Công thức toán học Latex
    nhưng

    nó lại không tính Công thức toán học Latex vào
    nhờ các anh chị sửa dùm code với ạ

    sao mình làm theo cách này mà nó không được nhỉ,, mọi người xem giúp mình nha:
    Code:
    #include<stdio.h>
    #include<conio.h>
    int main()
       {
       int i,j;
       float h,t,ep,pi;
       printf("\nNhap so epsilon<1: ");
       scanf("%f",&ep);
       pi=1.0;i=1;j=3;
       do{
              t=i+2;
              h=j+2; 
              if(((1.0/t)<ep)||((1.0/h)<ep)) break;
              pi=pi+1.0/t-1.0/h;          
      }while(1);
       printf("\nso pi can tim la %f",4*pi);
      
       getch();
       }

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

    theo như mình biết thì điều kiện kết thúc vòng lặp ở đây là t=4/(2*i+1)<=ep
    bạn xem lại nhé!!!!

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

  1. Tìm số Pi với độ chính xác Epsilon
    Gửi bởi langtupro07 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 10
    Bài viết cuối: 08-12-2014, 10:50 AM
  2. TP HCM Công ty Epsilon Mobile tuyển developer iOS / Android / HTML5
    Gửi bởi epsilon_mobile trong diễn đàn Tuyển dụng - Việc làm CNTT
    Trả lời: 1
    Bài viết cuối: 04-01-2013, 11:10 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