Ответ 1
Номер вопроса 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
На практике, если вы пишете программу, требующую заданной точности и которая может запускаться на экзотических или старых системах, очень хорошей идеей является определение ваших типов таким образом. Ниже приведены некоторые общие определения: Реальная точность