DEXP или EXP для показательной функции в фортране? - PullRequest
12 голосов
/ 12 января 2010

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

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

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

Заранее спасибо за помощь!

Лучший, Remek

Ответы [ 3 ]

18 голосов
/ 28 января 2010

Вопрос № 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

3 голосов
/ 12 января 2010

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

0 голосов
/ 12 января 2010

Ответ на часть 2 вашего вопроса заключается в том, что диапазон экспоненциальной функции - это набор всех положительных действительных чисел. В терминах Фортрана это означает, что набор всех РЕАЛЬНЫХ чисел больше 0. Да, согласно стандартам Фортрана, он зависит от компилятора, но на практике вы не ошибетесь, если вы примете его за набор всех положительных IEEE Числа с плавающей точкой, одинарной или двойной точности, как вы хотите. Но чтобы быть строгим, вы должны быть знакомы с KIND действительных чисел, которые поддерживает ваш компилятор, которые почти наверняка будут включать f-p числа IEEE, но могут включать и другие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...