gpt4 book ai didi

fortran - 使用 P 描述符写入 stdout 的第二个实数错误为 10 倍

转载 作者:行者123 更新时间:2023-12-02 02:14:50 28 4
gpt4 key购买 nike

这是一个最小的工作示例:

program test_stuff

implicit none

real :: b

b = 10000.0

write(*,'(A10,1PE12.4,F12.4)') "b, b: ", b, b

end program

我只需使用gfortran test_stuff.f90 -o test_stuff

进行编译

但是,运行该程序会给出以下输出:

$ ./test_stuff
b, b: 1.0000E+04 100000.0000

写入屏幕的第二个实值错误达 10 倍。

gfotran 9.3.0 和 10.2.0 都会发生这种情况,所以我肯定做错了什么,但我看不出它是什么。有人能发现我做错了什么吗?

最佳答案

P控制编辑描述符“暂时更改”(Fortran 2018 13.8.5)连接的比例因子连接模式。

但是,临时的意思是直到模式再次更改或直到数据传输语句结束:(Fortran 2018 12.5.2)

Edit descriptors take effect when they are encountered in format processing. When a data transfer statement terminates, the values for the modes are reset to the values in effect immediately before the data transfer statement was executed.

在该问题的情况下,两个输出值均使用值为 1 的比例因子进行处理。 .

此比例因子导致了“错误”的第二个值:E 的比例因子的解释存在差异。和F编辑。对于 E编辑比例因子只是更改表示形式,外部和内部值相同(有效数按比例放大 10,指数按比例减少 1),但对于 F编辑输出值本身会缩放:

On output, with F output editing, the effect is that the externally represented number equals the internally represented number multiplied by 10k

因此,10000 可以用 0.1000E+05 表示比例因子为 0 和 1.0000E+04比例因子为 E12.4 下的 1 ,在F12.4下使用适当的比例因子,值 10000 会缩放为 100000。


作为样式注释:尽管 1P 之间的逗号是可选的和E12.4 (和类似的),许多人会认为包含逗号更好,正是为了避免两个描述符(或看起来像一个描述符)的这种明显的紧密耦合。由于比例因子对 E 中的每个都有不同的影响。和F ,对 EN 没有影响有时但并不总是对 G 产生影响,我不会与任何调用 P 的人争论。邪恶。

关于fortran - 使用 P 描述符写入 stdout 的第二个实数错误为 10 倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67335498/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com