Fortran разбивает мой вывод на звездочки-почему?

мне трудно обернуть голову вокруг операторов форматирования в Fortran.

без форматирования моего вывода, это то, что я делаю (внутри цикла, так что это происходит несколько раз):

write(*,*) t*1E9

t здесь real*8. Выход-это то, что я ожидал - приращения 0.1, с некоторыми ошибками округления:

0.0000000000000000     
0.10000000000000001     
0.20000000000000001     
0.29999999999999999     
0.40000000000000002     
0.50000000000000000     
0.59999999999999998     
0.69999999999999996     
0.79999999999999993     
0.89999999999999991     
0.99999999999999989

теперь я пытаюсь добавить оператор формата:

write(*, '(F1.2)') t*1E9

и (со всем остальным то же) вместо этого я получаю только звездочки в моем выводе:

**
**
(etc...)

Я пытался прочитать, как это должно работать, и я не могу понять, почему это происходит. Я пробовал форматы с большим пространством для цифр (F15.15 просто дает мне больше звездочек на строку), я попытался переместить оператор format в свою собственную, помеченную строку... Я просто не могу получить желаемый результат.

что я пропустила?

1 ответов


операторы формата Fortran определяются как:

Fw.d, где w-количество символов, которые будут использоваться в общей сложности, и d-количество символов после десятичной точки. Здесь вы говорите ему, что вам нужен поплавок, то есть 1 символ в общей сложности и 2 символа после десятичной точки, что, очевидно, неправильно. Поэтому, чтобы получить, например, поплавок, который составляет 4 символа в общей сложности, с 3 десятичными знаками, вы напишете:

write(*, '(F4.3)') t*1E9

посмотреть http://www.cs.mtu.edu / ~shene/COURSES/cs201/NOTES/chap05/format.html

кроме того, я должен упомянуть, что звездочки указывают, что число не может быть отображено в указанном формате.

EDIT:

добавление в комментарий от Джорджа ниже:

" для формата E ширина поля должна быть как минимум на 7 больше, чем количество десятичных знаков, например E15.8. Четыре для экспоненты, два для ведущего 0. для возможного '-'. Обычно я добавляю еще один дополнительное пространство, чтобы числа не шли вместе, E16.8"