2017-01-12 2 views
0

Letting a1 быть первым термином, r быть постоянным, что каждый член умножается, чтобы получить следующий срок и n быть число слагаемых, геометрическая прогрессия: ai = a1*r**(i-1), pn продукт от n и sn сумма n.Лучше точность для решения геометрической прогрессии

У меня есть формулы для расчета этого, но Fortran 95 (Plato2) не признает необходимой точности. (Например: я не могу получить -1.234E + 00567890 в результате).

Как я могу «умно» удвоить точность работы с этими «огромными» цифрами?

+1

Вы должны показать свой код и описать, какая команда дает результат, который вы показываете. Не забудьте показать, как вы инициализируете свои переменные. В противном случае ваш вопрос будет закрыт как не по теме. Прочитайте [ask] и [mcve] –

ответ

1

Такие высокие цифры (ваш пример -1.234E + 00567890) слишком велики для любого встроенного числового типа, поставляемого стандартом Fortran. Они также больше, чем числа, используемые в физических и инженерных приложениях. Например, мой gfortran поддерживает следующие типы:

huge(1.0_real32) 3.40282347E+38 
huge(1.0_real64) 1.7976931348623157E+308 
huge(1.0_real128) 1.18973149535723176508575932662800702E+4932 

Насколько я знаю, нет Fortran компилятора доступен с гораздо большими внутренними типами с плавающей точкой.

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