2013-03-05 45 views
1

我寫了一個簡單的Fortran程序計算高斯常數:如何計算任意高精度的數字?

program main 

implicit none 

integer :: i, nit 
double precision :: u0, v0, ut, vt 

nit=60 
u0=1.d0 
v0=sqrt(2.d0) 
print *,1.d0/u0,1.d0/v0 

do i=1,nit 
    ut=sqrt(u0*v0) 
    vt=(u0+v0)/2.d0 
    u0=ut 
    v0=vt 
    print *,1.d0/u0,1.d0/v0 
enddo 

end program main 

結果0.83462684167407308後4次迭代。無論如何,使用算術幾何平均法有更好的結果嗎?人們如何計算諸如pi,歐拉常數等數字的許多數字?每個無理數都有一個特定的算法嗎?

+2

Fortran中我要做的就是用數學來這些常量來評估然而,許多數字,我需要/想,再切和這些數字粘貼到我的源文件中的一個參數的定義。嚴肅地說,準確地計算這些數字到高精度是一項艱鉅的任務。如果你真的想自己做,開始閱讀這裏:http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic – 2013-03-05 14:48:38

+0

根據你的鏈接,內存是主要限制和Fortran並不適應這樣的計算。謝謝您的幫助。 – user1824346 2013-03-05 15:10:59

+1

這個頁面 - http://myweb.lmu.edu/dmsmith/FMLIB.html - 表明你從維基百科文章中得出了一個不準確的結論。谷歌會幫你找到更多的圖書館去學習。 – 2013-03-05 15:25:32

回答

3

如果你的目標是要插入一個恆定值到你的程序中,最簡單的辦法是看在價值在網上或書上。一定要爲數值添加類型規範,其他Fortran會將其視爲單精度的默認值。可以將pi編寫爲pi_quad = 3.14159265358979323846264338327950288_real128 - 顯示常量上使用類型說明符。

如果你想要做高精度的計算,在你的編譯器你可以一些高精度型可用。現在許多編譯器具有四倍的精度。如果他們具有Fortran 2008版本的ISO_FORTRAN_ENV模塊,則可以通過real128這一類型來請求它。

任意精度(位數用戶指定數目,以非常高的位數)是語言以外,並在庫中可用,例如,MPFUN90,http://crd-legacy.lbl.gov/~dhbailey/mpdist/

是,不同的常數有各種算法。這是一個非常大的話題。

-3

解決方案PI:

pi = 4.0d0 * datan(1.0d0) 
+2

-1除了是一個非常簡單和低質量的答案,這也是錯誤的。 OP在詢問任意高精度,而不是雙精度。 – milancurcic 2013-03-07 19:57:37