浮点数的精度
real
类型的浮点数不能有任何实际值。它们可以表示一定数量的十进制数字的实数。
FORTRAN 77 保证了两种浮点类型,更新的标准保证了至少两种实际类型。实变量可以声明为
real x
double precision y
x
这里是一个真实的默认类型,y
是一个比 x
更精确的小数精度。在 Fortran 2008 中,y
的小数精度至少为 10,小数指数范围至少为 37。
real, parameter :: single = 1.12345678901234567890
double precision, parameter::double = 1.12345678901234567890d0
print *, single
print *, double
版画
1.12345684
1.1234567890123457
在使用默认配置的常见编译器中。
请注意双精度常数中的 d0
。包含 d
而不是 e
的真实文字用于表示指数用于表示双精度。
! Default single precision constant
1.23e45
! Double precision constant
1.23d45
Fortran 90 使用种类引入参数化 real
类型。真实类型的类型是一个名为常量或文字常量的整数:
real(kind=real_kind) :: x
要不就
real(real_kind) :: x
该声明声明 x
属于 real
,具有一定的精度,具体取决于 real_kind
的值。
可以使用后缀使用特定类型声明浮点文字
1.23456e78_real_kind
real_kind
的确切值不是标准化的,并且不同于编译器。要查询任何实变量或常数的类型,可以使用函数 kind()
:
print *, kind(1.0), kind(1.d0)
通常会打印
4 8
要么
1 2
取决于编译器。
种类数量可以通过多种方式设置:
-
单(默认)和双精度:
integer, parameter::single_kind = kind(1.) integer, parameter::double_kind = kind(1.d0)
-
使用内在函数
selected_real_kind([p, r])
指定所需的小数精度。返回的种类具有至少p
位的精度,并且允许指数至少为r
。integer, parameter::single_kind = selected_real_kind( p=6, r=37 ) integer, parameter::double_kind = selected_real_kind( p=15, r=200 )
-
从 Fortran 2003 开始,可以通过内部模块
ISO_C_Binding
获得预定义的常量,以确保实际类型可以与随附的 C 编译器的float
,double
或long_double
类型互操作:use ISO_C_Binding integer, parameter::single_kind = c_float integer, parameter::double_kind = c_double integer, parameter::long_kind = c_long_double
-
从 Fortran 2008 开始,可以通过内部模块
ISO_Fortran_env
获得预定义的常量。这些常量提供具有特定存储大小的实数类型use ISO_Fortran_env integer, parameter::single_kind = real32 integer, parameter::double_kind = real64 integer, parameter::quadruple_kind = real128
如果编译器中没有某种类型,则 selected_real_kind()
返回的值或整数常量的值为 -1
。