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數位生活區 即時熱門文章