DEXP или EXP для экспоненциальной функции в fortran?

У меня есть два очень коротких вопроса:

1 - Я просто прочитал, что DEXP() является архаичной формой EXP(). Означает ли это, что его больше не следует использовать? Я всегда думал, что DEXP() является двойной точностью, эквивалентной EXP().

2 - Каков диапазон экспоненциальной функции? Является ли он зависимым от компилятора?

Заранее благодарим за помощь!

Бест, Remek

Ответ 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

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

Ответ 2

"exp" - это общая функция, возвращающая тот же тип, что и его аргумент - точность реального или сложного. Его следует использовать в предпочтении старой форме "dexp", потому что с "exp" компилятор автоматически вернет правильный тип. Общие имена были добавлены в Fortran 77.

Ответ 3

Ответ на часть 2 вашего вопроса заключается в том, что диапазон экспоненциальной функции есть множество всех положительных действительных чисел. В терминах Fortran это означает, что набор всех REAL чисел больше 0. Да, в соответствии со стандартами Fortran, зависит от компилятора, но на практике вы не ошибетесь, если возьмете его в набор всех положительных IEEE с плавающей запятой, одинарной или двойной точности по вашему желанию. Но чтобы быть строгим, вы должны быть знакомы с KINDs действительных чисел, которые поддерживает ваш компилятор, который почти наверняка будет включать в себя номера f-p IEEE, но может также включать и другие.