Fortran 用P描述符写入标准输出的第二个实数错误因子为10
下面是一个简单的工作示例:Fortran 用P描述符写入标准输出的第二个实数错误因子为10,fortran,gfortran,Fortran,Gfortran,下面是一个简单的工作示例: program test_stuff implicit none real :: b b = 10000.0 write(*,'(A10,1PE12.4,F12.4)') "b, b: ", b, b end program 我只是用gfortran test\u stuff.f90-o test\u stuff编译它 但是,运行该程序会产生以下输出: $ ./test_stuff b, b: 1.
program test_stuff
implicit none
real :: b
b = 10000.0
write(*,'(A10,1PE12.4,F12.4)') "b, b: ", b, b
end program
我只是用gfortran test\u stuff.f90-o test\u stuff编译它
但是,运行该程序会产生以下输出:
$ ./test_stuff
b, b: 1.0000E+04 100000.0000
写入屏幕的第二个实数是错误的10倍
GFOTRAN9.3.0和10.2.0都出现了这种情况,所以我肯定是做错了什么,但我看不出是什么。有人能发现我做错了什么吗?控制编辑描述符“临时更改”(Fortran 2018 13.8.5)连接的比例因子连接模式 然而,临时的含义是直到再次更改模式或直到数据传输语句结束:(Fortran 2018 12.5.2) 编辑描述符在格式处理中遇到时生效。当数据传输语句终止时,模式的值将重置为执行数据传输语句之前立即生效的值 在问题的情况下,这两个输出值都因此使用具有值
1
的比例因子进行处理
此比例因子导致第二个值“错误”:对E
和F
编辑的比例因子的解释存在差异。对于E
编辑比例因子只需更改表示,外部值和内部值相同(有效位按比例增加10,指数按比例减少1),但对于F
编辑,输出值本身按比例增加:
在输出时,使用F输出编辑,其效果是外部表示的数字等于内部表示的数字乘以10k
因此,尽管10000在E12.4
下表示为0.1000E+05
比例因子为0,在E12.4
下表示为1.0000E+04
比例因子为1,但在F12.4
下,10000的值在比例因子到位的情况下表示为100000
作为风格注释:尽管逗号在
1P
和E12.4
之间是可选的(和类似的),但许多人认为最好包含逗号,这恰恰是为了避免两个描述符(或看起来像一个描述符)的这种明显的紧密耦合。由于比例因子对E
和F
有不同的影响,对EN
没有影响,有时但并不总是对G
有影响,所以我不会与任何人争论P
邪恶。您正在寻找Fortran 2018标准的第12.5.2节
格式化输入/输出的连接有几种可变模式:它们是。。。和比例系数(13.8.5) 连接模式的值在连接启动时建立。如果连接是由OPEN语句启动的,则值是OPEN语句显式或隐式指定的值。如果连接不是由OPEN语句启动的(即,如果文件是内部文件或预连接文件),则所建立的值是由初始OPEN语句(不含相应关键字)隐含的值 不能在OPEN语句中明确指定比例因子;它隐式地为0 连接模式可以通过以下方式临时更改。。。或者通过编辑描述符。。。编辑描述符在格式处理中遇到时生效。当数据传输语句终止时,模式的值将重置为执行数据传输语句之前立即生效的值因此,当您在格式中使用
1P
时,您更改了连接模式。这适用于处理1P
后的所有输出项。当write语句完成时,比例因子被重置为0。p编辑描述符恐怕有点混乱,在我看来,这是邪恶的-比例因子不仅适用于后面的直接项,而且适用于整行。因此,1P适用于整条线路。稍后我将从MR&C中找出适当的部分。(如果您不知道,可以在标记中使用
引入引用格式。)