打印pgf77的特性(FORTRAN 77的行为?)

时间:2013-09-02 09:25:26

标签: formatting fortran

我编译并运行这个简单的FORTRAN 77程序:

      program test
      write(6,*) '- - - - - - - - - - - - - - - - - - - - - - - - - - ',
     &           '- - - - - - - - - - - - - - - - - - - - - - - - - -'
      write(6,'(2G15.5)') 0.1,0.0
      end

gfortranf95输出为:

 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    0.10000         0.0000 

使用pgf77

 - - - - - - - - - - - - - - - - - - - - - - - - - - 
 - - - - - - - - - - - - - - - - - - - - - - - - - -
    0.10000        0.00000E+00

以及g77ifort

 - - - - - - - - - - - - - - - - - - - - - - - - - - 
 - - - - - - - - - - - - - - - - - - - - - - - - - -
    0.10000         0.0000 

出现了几个问题:

  1. 为什么0.0打印有四个小数位而不是五位,如 请求格式G15.5?这是否符合规范?为什么呢 pgf77以不同的方式写出来吗?

  2. 我猜最后三行的- - - - - -行换行了 编译器是由于输出行长度的一些限制...是 有没有办法增加这个限制,或以其他方式强制 单行写入,在编译时?

  3. 顺便说一句,所需的输出是

     - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        0.10000         0.00000
    

    与上述任何一项都不匹配。

1 个答案:

答案 0 :(得分:3)

G编辑描述符导致打印的确实有点复杂,但对于值0.0,标准(2008版本中的10.7.5.2.2)指出编译器应该打印一个在数字的小数部分中使用d-1(在您的示例中为4)数字表示。所以你的大多数编译器都表现正常;我认为pgf77不正确,但它可能适用于具有不同要求的早期标准。

对此最简单的解决方法可能是使用f编辑描述符,而不是(2F15.5)

对于连字符行的打印,使用导致 list-directed 输出的*编辑描述符会放弃对编译器输出的精确控制。我的观点是,在两行上打印表达式的两个部分对编译器来说有点不正常,但它不是非标准行为。

如果你想在一行上打印连字符,控制输出格式,write(6,'(2A24)')或类似的东西应该这样做(我没有为你计算连字符,只是猜到有24个输出的每一部分。)如果这对您没有吸引力,只需编写一个包含所有连字符的字符串;即使使用列表导向的输出,也可能写在一行上。