Как установить реальное число как пустое в Фортране? - PullRequest
2 голосов
/ 07 апреля 2019

У меня есть список из 500 чисел, и я хотел взять среднее из каждых 10 чисел, последовательно, и, таким образом, создать выходной файл с 50 точками данных.Тогда это будет дальше подготовлено.

Но предположим, что в интервале 10 все 10 данных отсутствуют, т. Е. Пусто, тогда я должен иметь возможность записать соответственно пустое значение в выходной файл.Но, если мой выходной массив имеет реальный тип, то я не могу записать его как пустой символ.

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

У моего вопроса есть две точки: -

  1. Есть ли способ сохранить реальную переменную как пустую?

  2. или, Как сохранить действительные значения в символьной переменной типа?

Я попытался проверить следующий код: -

real r
r=''
write(*,*) r

Выходные данные 'r' показывают некоторое реальное значение.

И если кто-то предлагает мне записать выходные данные непосредственно в файл, я должен сказать, что мне нужен этот выходной массив для дальнейших процедур.

1 Ответ

2 голосов
/ 07 апреля 2019

Действительное число Фортрана - это всегда число, чаще всего в формате IEEE с плавающей точкой https://en.wikipedia.org/wiki/IEEE_754. Существуют некоторые специальные значения, такие как not-a-number (NaN) и + -infinity (+ Inf, -Inf), но они также не будут выводиться пустыми.

Если я правильно понимаю, вам, по сути, нужен какой-то тип опции .

Вы должны либо проверить, содержит ли число это специальное значение, и вывести пробел, если это так

  if (ieee_is_nan(r)) then
    write(*,*)
  else
    write (*,*) r
  end if

или вам придется использовать более сложный тип

  type my_type
    real value
    logical is_blank =.false.
  end type

или вам придется использовать размещаемую вещественную переменную и оставить ее не выделенной, если она пуста

  if (.not. allocated(r)) then
    write(*,*)
  else
    write (*,*) r
  end if
...