Вопрос № 1:
Как упоминалось ранее, всегда лучше использовать универсальные функции, такие как EXP (), вместо устаревших специфичных для типа эквивалентов, таких как DEXP ().
В старых (действительно старых) версиях FORTRAN (до FORTRAN 77) для каждого типа данных требовалась отдельная функция. Поэтому, если вы хотите, чтобы для экспоненциальной функции потребовалось: EXP () для чисел одинарной точности, DEXP () для чисел двойной точности или CEXP () для комплексных чисел. FORTAN теперь имеет перегрузку функций, поэтому для любого стандартного типа будет работать одна функция.
Вопрос № 2.
В принципе возможный диапазон показателя степени может зависеть от процессора и компилятора. Однако, как упоминалось ранее, большинство современных процессоров и компиляторов будут использовать стандарт IEEE.
При необходимости можно указать требуемый диапазон переменной при ее объявлении. Используемая функция: SELECTED_REAL_KIND([P,R])
.
Например, предположим, что вы убедитесь, что x
относится к типу с десятичной точностью не менее 10 цифр и диапазоном десятичных показателей как минимум 100.
INTEGER, PARAMETER :: mytype = SELECTED_REAL_KIND(10, 100)
REAL(KIND=mytype) :: x
Для получения дополнительной информации: SELECTED_REAL_KIND
На практике, если вы пишете программу, которая требует заданной точности и которая может быть запущена на экзотических или старых системах, очень хорошо определить ваши типы таким образом. Здесь приведены некоторые общие определения: Real Precision