当实数很大、很小或跨度较大时,指数形式通常比固定小数形式更合适。Fortran 提供E、ES、EN和G描述符,用不同规则表示同一个数值。
四种描述符
- Ew.d使用指数形式,尾数通常调整到绝对值小于1。
- ESw.d使用科学计数法,使非零值的小数点前保留一位数字。
- ENw.d使用工程计数法,使指数保持为3的倍数。
- Gw.d根据数值大小选择普通小数或指数形式。
本文代码
! E、ES、EN和G以不同形式格式化同一个实数。
program exponentialDescriptorsDemo
implicit none
real :: sampleValue
sampleValue = 12345.678
print "(A,E14.5)", "E :", sampleValue
print "(A,ES14.5)", "ES :", sampleValue
print "(A,EN14.5)", "EN :", sampleValue
print "(A,G14.5)", "G :", sampleValue
end program exponentialDescriptorsDemo
编译运行
(base) hong@hongdeMacBook-Pro 036.exponentialDescriptors % gfortran exampleExponentialDescriptors.f90
(base) hong@hongdeMacBook-Pro 036.exponentialDescriptors % ./a.out
E : 0.12346E+05
ES : 1.23457E+04
EN : 12.34568E+03
G : 12346.
现象分析
前三行表示同一个数值,但尾数和指数的组合不同。E得到0.12346E+05,ES得到常见的科学计数法1.23457E+04,EN则把指数调整为3的倍数。
G14.5判断该数值适合直接显示,因此没有采用指数形式,并按5位有效数字输出为12346。
核心知识点
- ES适合科学计算结果,EN适合工程量与工程前缀。
- G适合数值跨度较大且希望自动选择表示形式的输出。
- 描述符改变的是文本表示,不改变变量保存的数值。