2013-03-05 3 views
1

Я написал простой Фортран для вычисления константы Гаусса:Как рассчитать числа до произвольно высокой точности?

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 я использую Mathematica для оценки этих констант, чтобы сколько-нибудь количество цифр мне нужно/нужно, а затем вырезать и вставлять эти цифры в определение параметра в моих исходных файлах. Серьезно, вычисление этих чисел с точностью до высокой точности - непростая задача. Если вы действительно хотите это сделать, начните читать здесь: http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic –

+0

Согласно вашей ссылке, память является основным ограничением, а fortran не приспособлен для таких вычислений. Спасибо за помощь. – user1824346

+1

Эта страница - http://myweb.lmu.edu/dmsmith/FMLIB.html - предполагает, что вы сделали неточное заключение из статьи в Википедии. Google поможет вам найти больше библиотек для изучения. –

ответ

3

Если цель состоит в том, чтобы вставить постоянное значение в вашу программу, самое простое решение, чтобы искать значение в Интернете в или книге. Не забудьте добавить спецификацию типа к числовому значению, другой Fortran будет рассматривать его как значение по умолчанию для одной точности. Можно написать pi как pi_quad = 3.14159265358979323846264338327950288_real128 - показывая использование спецификатора типа для константы.

Если вы хотите выполнить вычисления с высокой точностью, вы можете использовать высокоточный тип в своем компиляторе. Многие компиляторы теперь имеют четкую точность. Если у них есть версия модуля ISO_FORTRAN_ENV Fortran 2008, вы можете запросить это с помощью типа real128.

Произвольная точность (указанного пользователь количества цифр, очень большое количество цифр) находится вне языка и доступен в библиотеках, например, MPFUN90, http://crd-legacy.lbl.gov/~dhbailey/mpdist/

Да, различные константы имеют различные алгоритмы. Это очень большая тема.

-3

Раствор для пи:

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

-1 Кроме того, чтобы быть очень минимальным и низким качеством ответа, это также неправильно. ОП спрашивает о сколь угодно высокой точности, а не о двойной точности. – milancurcic

Смежные вопросы