2013-03-05 86 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