如何在Fortran中将实数设置为空白?

时间:2019-04-07 05:21:38

标签: fortran gfortran

我有一个包含500个数字的列表,并且想要连续取每10个数字的平均值,从而创建一个包含50个数据点的输出文件。然后将对其进行进一步绘制。

但是假设在10个间隔中所有10个数据都丢失了,即空白,那么我应该能够在输出文件中相应地写入空白。但是,如果我的输出数组是实型,则不能将其写为空白字符。

我什至试图将输出数组创建为字符类型,但是,这显示了无法将实际值写入字符类型变量的问题。

我的问题有两点:-

  1. 有什么方法可以将实变量存储为空白?

  2. 或者,如何将实数值存储到字符类型变量中?

我尝试了以下代码进行测试:-

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

输出'r'代替一些实际值。

对于有人建议我将输出直接写入文件的情况,我必须告诉我,我需要该输出数组,以便对其进行进一步的处理。

1 个答案:

答案 0 :(得分:2)

Fortran实数始终是一个数字,通常是IEEE浮点格式https://en.wikipedia.org/wiki/IEEE_754。有一些特殊值,例如非数字(NaN)和+-无穷大(+ Inf,-Inf),但它们也不会输出为空白。

如果我对它的理解正确,那么您基本上想要某种Option type

您必须检查数字是否包含此特殊值,并在这种情况下输出空白

  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