Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran 用P描述符写入标准输出的第二个实数错误因子为10_Fortran_Gfortran - Fatal编程技术网

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中找出适当的部分。(如果您不知道,可以在标记中使用
引入引用格式。)