Re: [問題] 準確度問題

看板Fortran作者 (sjgau)時間15年前 (2009/11/10 07:36), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串4/5 (看更多)
/* n= 4, 0.666666666666666740 n= 6, 0.711111111111111140 n= 8, 0.707936507936507970 n= 10, 0.708077601410934790 n= 12, 0.708073325851103720 n= 14, 0.708073419819451710 n= 16, 0.708073418253312600 n= 18, 0.708073418273785000 n= 20, 0.708073418273569510 n= 22, 0.708073418273571400 以下的答案都跟 n= 22 相同 C 的程式很短,你自己 改成 F90 吧 n= 24, 0.708073418273571400 n= 26, 0.708073418273571400 n= 28, 0.708073418273571400 n= 30, 0.708073418273571400 n= 32, 0.708073418273571400 n= 34, 0.708073418273571400 n= 36, 0.708073418273571400 n= 38, 0.708073418273571400 n= 40, 0.708073418273571400 n= 42, 0.708073418273571400 n= 44, 0.708073418273571400 n= 46, 0.708073418273571400 n= 48, 0.708073418273571400 n= 50, 0.708073418273571400 Press any key to continue */ // ---------------------------------------------- #include "stdafx.h" #include <stdio.h> #include <math.h> #include <process.h> // ---------------------------------------------- double get_item(int n) { double ans; ans= 1.0; for (int i=2;i<=n;i++) { ans= ans*2.0/i; } return(ans); }// end of get_item() // ---------------------------------------------- int main(int argc, char* argv[]) { double sum, item; int m, n; sum= 1.0; for (m=2;m <= 25;m++) { n= m*2; item= get_item(m*2); if ((m%2) == 0) { item*= -1; } sum+= item; printf("n= %3d, %.18lf\n", (n), sum); } return 0; } ※ 引述《mon02118 (我不是好男人)》之銘言: : 我們老師出一個作業 : 計算 : 2^3 2^5 2^7 2^9 2^49 : 1- ----- + ----- - ----- + ----- .... ------ : 4! 6! 8! 10! 50! : 這是我打的 : implicit none : integer::i,a,c : real(kind=8)::ss,n,v : a=1 : do i=1,50 : if(i/2*2/=i)n=2**i : a=a*i : if(i/2*2==i)then : v=a : c=c+1 : ss=ss-(-1)**c*n/v : write(*,*)c,ss : endif : enddo : end : 算出來的 : 1 1.00000000000000 : 2 0.666666666666667 : 3 0.711111111111111 : 4 0.707936507936508 : 5 0.708077601410935 : 6 0.708073325851104 : 7 0.708079731129053 : 8 0.708063381375117 : 9 0.707917491813515 : 10 0.708166899470330 : 11 0.704154863362005 : 12 0.714965674172816 : 13 0.696866126661503 : 14 0.794427102271259 : 15 1.17537948322364 : 16 0.175379483223640 : 17 NaN : 18 NaN : 19 NaN : 20 NaN : 21 NaN : 22 NaN : 23 NaN : 24 NaN : 25 NaN : 好像算到第10項就錯了, 請問我應該怎麼修改呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.231.73.177

11/10 22:30, , 1F
謝謝你,但是寫程式不是我的專業,我只學過Fortran。 :D
11/10 22:30, 1F
文章代碼(AID): #1A-AUR-S (Fortran)
討論串 (同標題文章)
文章代碼(AID): #1A-AUR-S (Fortran)