代码之家  ›  专栏  ›  技术社区  ›  Axion004

用FORTRAN中的级数求和法计算π

  •  1
  • Axion004  · 技术社区  · 7 年前

    注意:此网站不支持乳胶。我不确定是否有更好的方法来写数学方程式,而不是用代码来写。

    我正在编写一个Fortran程序,通过系列求和来估计π:

    A = Sum of a_i from i=1 to N
    

    哪里

    pi/4 = 1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + 1/13 ...
    

    为了通过级数求和计算π,建议的方法是

    a_i = (-1)^(i+1)/(2i-1)
    

    为此,我编写了以下Fortran程序-

    program cpi
    double precision val, pi
    integer i
    num = 1000
    val = 0
    do i = 1, num
      val = val + ((-1)**(i+1))/(2*i-1)
    end do
    pi = val
    print *, 'Estimated Value of PI:', pi
    end program cpi
    

    当我运行这个程序时,输出是

       Estimated Value of PI:   1.0000000000000000     
    

    我一定是犯了一个错误 /(2*i-1) )我刚接触Fortran,不知道自己做错了什么。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Axion004    7 年前

    我明白我的错误!我需要写出来 1.d0 and 2.d0 instead of 1 and 2 这样,计算结果将以双格式进行评估。我也忘了乘 pi = val*4.d0 . 将CPI程序更改为

    program cpi
    double precision val, pi, MFLOPS
    integer i, T1, T2
    num = 1000000
    val = 0.d0
    call system_clock(T1)       ! get time stamp
    do i = 1, num
      val = val + ((-1.d0)**(i+1.d0))/(2.d0*i-1.d0)
    end do
    call system_clock(T2)       ! get time stamp
    MFLOPS = num*2.d0/((T2-T1)*1.d8)     ! compute MFlop/sec rate
    pi = val*4.d0
    print *, 'Estimated Value of PI:', pi
    print *, 'The calculated number of MFLOPS is:', MFLOPS
    end program cpi
    

    收益率

    Estimated Value of PI:   3.1415916535897743     
    The calculated number of MFLOPS is:   3.0303030303030304E-002
    

    我还添加了一个mflops计算来查看计算速度。