如何计算数字到任意高精度?

时间:2013-03-05 14:41:36

标签: fortran arbitrary-precision rounding-error

我写了一个简单的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

4次迭代后,结果为0.83462684167407308。无论如何使用算术几何平均法得到更好的结果?人们如何计算pi,Euler常数等数字的多个数字?每个无理数都有特定的算法吗?

2 个答案:

答案 0 :(得分:3)

如果您的目标是在程序中插入常量值,最简单的解决方案是在Web或书中查找值。请务必在数值中添加类型规范,其他Fortran会将其视为单精度的默认值。可以将pi写为pi_quad = 3.14159265358979323846264338327950288_real128 - 显示在常量上使用类型说明符。

如果要进行高精度计算,可以在编译器中使用一些高精度类型。许多编译器现在具有四倍的精度。如果他们具有ISO_FORTRAN_ENV模块的Fortran 2008版本,则可以通过类型real128请求此版本。

任意精度(用户指定的位数,到非常高的位数)不在语言范围内,可在库中使用,例如MPFUN90,http://crd-legacy.lbl.gov/~dhbailey/mpdist/

是的,不同的常量有各种算法。这是一个非常大的话题。

答案 1 :(得分:-3)

pi的解决方案:

  pi = 4.0d0 * datan(1.0d0)