Другой способ сделать это - сначала явно указать желаемую точность в переменной, используя встроенную функцию SELECTED_REAL_KIND, а затем использовать ее для определения и инициализации переменных. Что-то вроде:
INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(15)
REAL(dp) :: x
x = 1.0_dp
Хорошим преимуществом этого является то, что вы можете сохранить определение dpв модуле, а затем в USEтом модуле, где это необходимо. Теперь, если вы когда-нибудь захотите изменить точность вашей программы, вам нужно всего лишь изменить определение dpв этом месте вместо того, чтобы искать и заменять все D0s в конце инициализации вашей переменной. (Именно поэтому я бы рекомендовал не использовать 1.0D-1синтаксис для определения Y, как это было предложено. Это работает, но затрудняет поиск и изменение всех экземпляров в будущем.)
Эта страница на Fortran Wiki дает хорошую дополнительную информацию о SELECTED_REAL_KIND.
И как часто людям действительно приходится слепо менять точность своих программ, не проходя процедуру за процедурой или тестирование? Основная причина использования _dpсхемы заключается в том, чтобы точность была четко определена портативным способом.
ja72
12
Вы объявили переменные с двойной точностью, но инициализировали их значениями с одинарной точностью.
Вы могли бы написать:
X=1.0d0
Y=1.0d-1
Ответ Баррона ниже - это еще один способ сделать буквальную двойную точность, с тем преимуществом, что он позволяет вам изменить точность ваших переменных в более позднее время.
_dp
схемы заключается в том, чтобы точность была четко определена портативным способом.Вы объявили переменные с двойной точностью, но инициализировали их значениями с одинарной точностью.
Вы могли бы написать:
Ответ Баррона ниже - это еще один способ сделать буквальную двойную точность, с тем преимуществом, что он позволяет вам изменить точность ваших переменных в более позднее время.
источник