尝试找出为什么 Fortran“G”格式输出星号

问题描述 投票:0回答:1

以下输出星号(当我期望 -10.00 时),我试图找出原因:

WRITE(*,'(G10.4)') -9.99961061241612  

我尝试过以下情况:

WRITE(*,'(G10.4)') -9.99961061241612  Outputs: **********
WRITE(*,'(G10.4)') -9.99999999999999  Outputs: -10.00
WRITE(*,'(G10.4)') -9.999             Outputs: -9.999
WRITE(*,'(G10.4)') -9.9999            Outputs: **********
WRITE(*,'(G10.4)') -9.99999           Outputs: -10.00
WRITE(*,'(G10.4)')  9.9999            Outputs: 10.000

当负数四舍五入到小数点后第四位时,它似乎会输出星号。 有人可以解释一下我为什么以及如何解释这种行为吗?

据我所知,G 格式应该按以下方式工作:

如果值大于 0.1 但又不太大而无法放入字段中,则使用字段宽度 w 并输出 d 个有效数字,以十进制格式(类似于 F 描述符)写入该数字。该数字后面有四个空格。否则,它的行为与 Ew.d 描述符完全相同。

地点: w 总字段宽度(必须大于零) d 小数点右边的位数(可能为零)

例如: WRITE(*,'(G10.4)') -0.000099961061241612 输出:-.9996E-04

我正在将 Intel Fortran 编译器软件包 ID:w_oneAPI_2022.0.0.161 与 Microsoft Visual Studio Professional 2019 版本 16.11.40 结合使用

fortran format intel-fortran
1个回答
0
投票

出现星号是因为

G10.4
格式舍入为
-9.99961061241612
后无法将
-10.00
的舍入结果容纳在 10 个字符字段内。当负数向上舍入超出字段宽度时会发生这种情况。

解决方案:

  • 增加字段宽度,例如
    G12.4
    ,以留出更多空间:
    WRITE(*,'(G12.4)') -9.99961061241612
    
  • 或者,使用
    F
    格式进行定点输出:
    WRITE(*,'(F10.4)') -9.99961061241612
    
© www.soinside.com 2019 - 2024. All rights reserved.