Полезны ли специальные функции двойной точности в Фортране? - PullRequest
0 голосов
/ 29 мая 2018

Я заметил, используя gfortran, что функция tan возвращает реальные значения того же типа, что и ее аргумент;например, можно передать ему real(kind=4), real(kind=8) или real(kind=16) и получить результаты в real(kind=4), real(kind=8) или real(kind=16) соответственно.

Функции двойной точности, такие как dtan, с другой стороны, не такие гибкие.Если двойной тип по умолчанию равен 8 [1], они только принимают и возвращают real(kind=8), а если тип по умолчанию равен 16 [2], они только принимают и возвращают real(kind=16).

Являются ли эти определенные поведения, и еслиИтак, каков вариант использования функций двойной точности или они устарели?


[1], если скомпилировано с -fdefault-double-8 или без -fdefault-real-8

[2], скомпилировано с -fdefault-real-8 и без -fdefault-double-8

1 Ответ

0 голосов
/ 29 мая 2018

Специальная функция точности, такая как dtan, фактически не нужна с FORTRAN 77. Это давно время назад.Некоторые все еще используют их, но их следует использовать как можно меньше (я бы сказал, никогда).FORTRAN 77 принес общие встроенные функции, и это то, что обычно следует использовать.Вы просто должны проверить тип аргумента.С функциями d... компилятор будет жаловаться, если аргумент не имеет двойной точности.

Но они полностью действительны Fortran 2008. Произошли некоторые изменения относительно их устаревания в Fortran 2018, но я нечто точно. В Fortran 2018, однако, они объявлены устаревшими (см. также комментарий Стива).Я думаю, что будет также невозможно передать их в качестве аргументов процедуры другим процедурам.

В качестве заключительного замечания, real(kind=4), real(kind=8) or real(kind=16) НЕ является переносимой нотацией.Добрые числа 4, 8 and 16 вообще не должны существовать или могут означать что-то другое в разных компиляторах. Номер типа НЕ является числом байтов. Действительно, некоторые компиляторы используют номера типа 1, 2 and 3.См. параметр типа Fortran 90

...