( rpsoft | 2020. 03. 25., sze - 10:25 )

Szerkesztve: 2020. 03. 25., sze - 10:27

Jó példa a programod arra, hogy "premature optimization is the source of all evil". Hegyezed a ciklusokat, ahelyett, hogy egy jó (gyorsan konvergáló) közelítést alkalmaznál a pi-re. A tied 1/n-esen haladó alternáló sor, kicsit fáj. Ha választanál egy jobbat, pl. a Madhawa-Leibniz-formulát (valahonnan ki kell nézned a sqrt(12.d0)-t), akkor 1000 lépésben jobb eredményt kapnál.

      program pi2
      implicit none
      integer nm, i
      parameter ( nm = 1000)
      double precision smd(nm+1), res, s
      s=1.d0
      do i = 0,nm
        smd(i+1) = s/(2.d0*i+1.d0)
        s = -s/3
      end do
      res = 0.d0
      do i = nm,1,-1
        res = res + smd(i)
      end do
      write(*,*) sqrt(12.d0)*res
      end program

az eredmény:

./pi2
   3.1415926535897931

(Épp ez a magasszintű nyelvek előnye. A technikai részleteken való szellemi maszturbáció helyett a probléma lelkére fókuszálhatsz. Ez gyorsabb lesz Pythonban, mint egy szar algoritmus fényesre polírozva assemblerben.)