【问题标题】:How to set a real number as a blank in Fortran?如何在 Fortran 中将实数设置为空白?
【发布时间】:2019-04-07 05:21:37
【问题描述】:

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

但是假设在 10 的间隔中,所有 10 个数据都丢失了,即空白,那么我应该能够在输出文件中写入相应的空白。但是,如果我的输出数组是真正的类型,那么我就不能把它写成一个空白字符。

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

我的问题有两点:-

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

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

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

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

输出 'r' 显示了一些实际值。

对于建议我应该将输出直接写入文件的人,我必须说,我需要该输出数组来进行进一步的处理。

【问题讨论】:

    标签: fortran gfortran


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多