在 Fortran 中对真实文字同时使用科学记数法和下划线种类说明符
Using scientific notation and underscore kind specifier at the same time for real literals in Fortran
在 Fortran 中对浮点文字使用科学记数法很容易:
1.5d-10
表示接近 1.5*10^-15
.
的双精度(无论在当前 Fortran 编译器设置下意味着什么)浮点值
但是,指数表示法和浮点类型说明符的融合有点问题。当一个人希望它具有 C_DOUBLE
类型时,如何声明这个浮点文字?
我知道这有点吹毛求疵,但在某些情况下,双精度可能与 C_DOUBLE
不同。
真正的文字可以用以下任何一种形式指定:
1.2
1.2e0
1.2d0
1.2_kind
1.2e0_kind
最后一个是使用种类说明符和指数的示例。所以,具体到问题:1.5e-15_C_DOUBLE
.
肯定会有 1.5d-15
与 1.5e-15_C_DOUBLE
不同的情况。双精度类型和 real(C_DOUBLE)
分别由 Fortran 和配套 C 编译器选择。
允许通过编译器标志将单精度和双精度文字常量提升为更高种类的编译器不会触及 real(C_DOUBLE)
。
对于没有小数部分的实数值,还有其他可用形式:
1.
1e0
1.e0
1d0
1.d0
1.e0_kind
1e0_kind
也就是说,小数部分是可选的,如果给出了指数,小数点分隔符也是可选的。但是请注意 1
是整数文字,而 1e0
和类似的是真实的。
在 Fortran 中对浮点文字使用科学记数法很容易:
1.5d-10
表示接近 1.5*10^-15
.
但是,指数表示法和浮点类型说明符的融合有点问题。当一个人希望它具有 C_DOUBLE
类型时,如何声明这个浮点文字?
我知道这有点吹毛求疵,但在某些情况下,双精度可能与 C_DOUBLE
不同。
真正的文字可以用以下任何一种形式指定:
1.2
1.2e0
1.2d0
1.2_kind
1.2e0_kind
最后一个是使用种类说明符和指数的示例。所以,具体到问题:1.5e-15_C_DOUBLE
.
肯定会有 1.5d-15
与 1.5e-15_C_DOUBLE
不同的情况。双精度类型和 real(C_DOUBLE)
分别由 Fortran 和配套 C 编译器选择。
允许通过编译器标志将单精度和双精度文字常量提升为更高种类的编译器不会触及 real(C_DOUBLE)
。
对于没有小数部分的实数值,还有其他可用形式:
1.
1e0
1.e0
1d0
1.d0
1.e0_kind
1e0_kind
也就是说,小数部分是可选的,如果给出了指数,小数点分隔符也是可选的。但是请注意 1
是整数文字,而 1e0
和类似的是真实的。