Должен ли я использовать '.d0' при присвоении значений переменной, даже если я использую REAL(8) для ее объявления в Фортране?

Я относительно новичок в использовании языка Fortran, и я имею дело с предварительно написанной программой, в которую мне нужно внести некоторые изменения, и у меня есть все 8-байтовые переменные, объявленные как REAL(8) в области операторов программы. Однако при присвоении числовых значений переменным и/или массивам автор оригинальной программы всегда использует что-то вроде:

...

НАСТОЯЩИЙ(8) А

A = 1.d0

...

Является ли это строго необходимым, учитывая, что «A» объявлено не как DOUBLE PRECISION, а буквально как REAL(8), даже если подумать — я думаю — оба имеют один и тот же вид?

Кроме того, я где-то читал, что от использования REAL(8) следует отказаться? Это так? Почему?

Насколько мне известно (и я, конечно, могу ошибаться), количество байтов, используемых в переменной DOUBLE PRECISION, зависит от компилятора, что делает его опасным (я полагаю) или, по крайней мере, нежелательным его использование вместо REAL(8) , если я намерен объявить 8-байтовую переменную.

(Я работаю с Фортраном 90/95)

Буду признателен за комментарии, разъясняющие этот вопрос! Большое спасибо!


person Augusto Bopsin Borges    schedule 28.04.2021    source источник
comment
Хотя ваши пункты тесно связаны, вы, возможно, задаете слишком много вопросов в одном вопросе. Однако в качестве введения в параметры вида см. этот другой вопрос. После того, как вы прочтете это, пожалуйста, обрежьте все связанные аспекты, которые вы недавно поняли, чтобы этот вопрос стал более сфокусированным.   -  person francescalus    schedule 29.04.2021
comment
Во-первых, вы вообще не должны использовать real(8) с магической константой 8. .d0 объявляет константу как double precision, а не real(8). real(8) не всегда означает 8 байт и вообще не должен существовать. Целые числа, такие как 1, и степени двойки, такие как 0.25, точно представляются в двоичном виде. Я не использую реальные виды для целочисленных констант. Я просто использую A = 1.   -  person Vladimir F    schedule 29.04.2021
comment
Вы также можете прочитать здесь об аспектах присваивания и преобразования типов.   -  person francescalus    schedule 29.04.2021
comment
@VladimirF, спасибо за ваш комментарий. Однако A = 1.d0 был просто примером, показывающим, как первоначальный автор программы записывает и приписывает значения реальным переменным. Почему я вообще не должен использовать «8» в реальном (8)? Как бы вы тогда объявили реальную переменную с 8 байтами и присвоили ей значение?   -  person Augusto Bopsin Borges    schedule 29.04.2021
comment
Спасибо, @francescalus .. буду читать посты   -  person Augusto Bopsin Borges    schedule 29.04.2021
comment
Поддержка Real( 8 ) компиляторами не гарантируется. Таким образом, использование Real( 8 ) означает, что ваша программа может не скомпилироваться. У нас были вопросы здесь, где это так. Кроме того, Real( 8 ), если он поддерживается, не имеет четко определенной точности или диапазона для представляемого числа. В стандартном Fortran есть способы избежать обеих этих проблем. Таким образом, Real( 8 ) не является хорошей практикой. См. вопрос, связанный с Francescalus   -  person Ian Bush    schedule 29.04.2021
comment
Вы также можете посмотреть stackoverflow.com/questions/5263157/ Несмотря на то, что в вопросе упоминается компилятор Intel, он не относится к этому   -  person Ian Bush    schedule 29.04.2021
comment
Мне нравится ISO_C_BINDING, а затем REAL (KIND=C_DOUBLE) ::A. Позже A=1.0_C_DOUBLE показывает намерение.   -  person Holmz    schedule 30.04.2021