Проблема с числами с плавающей запятой заключается в том, что нет такой точности: только значимые цифры.
Например, если вы вычисляете долготы в реальном * 1, недалеко от Великобритании, вы были бы точны до шести знаков после запятой, но если бы вы были в Колорадо-Спрингсе, это было бы точно только до 4 знаков после запятой. Было бы бессмысленно печатать номер в формате F, это просто мусор после четвертого знака после запятой.
Если вы хотите печатать до максимальной точности, напечатайте в формате E. Так как это всегда n.nn..nEnn, вы получаете все значимые цифры.
Edit - запрос user4050 в Попробуйте следующий пример
program main
real intpart, multiplier
integer ii
multiplier = 1
do ii = 1, 6
intpart = 9.87654321
intpart = intpart * multiplier
print '(F15.7 E15.7 G15.8)', intpart, intpart, intpart
multiplier = multiplier * 10
end do
stop
end program
Что вы получите что-то вроде
9.8765430 0.9876543E+01 9.8765430
98.7654266 0.9876543E+02 98.765427
987.6542969 0.9876543E+03 987.65430
9876.5429688 0.9876543E+04 9876.5430
98765.4296875 0.9876543E+05 98765.430
987654.3125000 0.9876543E+06 987654.31
Обратите внимание, что точность изменения, как число становится больше, потому что только поплавок имеет 7 значительных цифр.
Список, назначенный IO, 'write (*, *)', должен автоматически обеспечивать точность типов в списке. Но вы отказываетесь от управления компоновкой вывода. Есть ли гарантия того, что значения могут быть прочитаны с точным восстановлением значений? –
, без сомнения, вещь, связанная с компилятором, но список направленной записи дает мне чуть меньше точности, чем требуется для считывания значения обратно без потерь (выглядит так: * дает f15.6 для одного значения точности порядка 1, где f15.7 необходимо.) – agentp
@Jagte FYI набивка строки в формате statent - старая школа. Надеюсь, вы не думаете, что это необходимо.write (\ *, \ *) 'Ответ:', x, вероятно, все, что вам нужно, если вы действительно не хотите удерживать себя, возможно, теряя точность в один разряд или вам действительно нужен точный контроль за интервалом. – agentp