如何计算任意高精度的数字?
我写了一个简单的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,欧拉常数等数字的许多数字?每个无理数都有一个特定的算法吗?
如果你的目标是要插入一个恒定值到你的程序中,最简单的办法是看在价值在网上或书上。一定要为数值添加类型规范,其他Fortran会将其视为单精度的默认值。可以将pi编写为pi_quad = 3.14159265358979323846264338327950288_real128
- 显示常量上使用类型说明符。
如果你想要做高精度的计算,在你的编译器你可以一些高精度型可用。现在许多编译器具有四倍的精度。如果他们具有Fortran 2008版本的ISO_FORTRAN_ENV模块,则可以通过real128
这一类型来请求它。
任意精度(位数用户指定数目,以非常高的位数)是语言以外,并在库中可用,例如,MPFUN90,http://crd-legacy.lbl.gov/~dhbailey/mpdist/
是,不同的常数有各种算法。这是一个非常大的话题。
解决方案PI:
pi = 4.0d0 * datan(1.0d0)
-1除了是一个非常简单和低质量的答案,这也是错误的。 OP在询问任意高精度,而不是双精度。 – milancurcic 2013-03-07 19:57:37
Fortran中我要做的就是用数学来这些常量来评估然而,许多数字,我需要/想,再切和这些数字粘贴到我的源文件中的一个参数的定义。严肃地说,准确地计算这些数字到高精度是一项艰巨的任务。如果你真的想自己做,开始阅读这里:http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic – 2013-03-05 14:48:38
根据你的链接,内存是主要限制和Fortran并不适应这样的计算。谢谢您的帮助。 – user1824346 2013-03-05 15:10:59
这个页面 - http://myweb.lmu.edu/dmsmith/FMLIB.html - 表明你从维基百科文章中得出了一个不准确的结论。谷歌会帮你找到更多的图书馆去学习。 – 2013-03-05 15:25:32