作者sjgau (sjgau)
看板Fortran
标题Re: [问题] 准确度问题
时间Wed Nov 11 11:16:14 2009
: #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()
: // ----------------------------------------------
上面是 函数,
for 是回圈,等於
int i= 2;
do while(i .LT. n)
ans= ans*2.0/i
i= i + 1
end do
个人觉得,Fortran 和 C 没有什麽不同啊
: 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.79.164
1F:推 YCTzeng:我还是看不懂C,为什麽一开始有#include, 大括号是什麽意思 11/23 12:23
2F:推 smingtsai:#include视同游戏外挂没某些外挂不能做某些事 12/16 19:19
3F:→ smingtsai:大括号为fortran里的loop如do-enddo,if-endif 12/16 19:20
4F:→ smingtsai:亦可视为founction-end,subroutine-end 12/16 19:22