Re: [問題] 準確度問題
/*
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
11/10 22:30, 1F
討論串 (同標題文章)
Fortran 近期熱門文章
PTT數位生活區 即時熱門文章
-1
12