Fortran 浮点数精度
示例
类型的浮点数real不能有任何实数值。它们可以表示实数,最多可以包含一定数量的十进制数字。
FORTRAN77保证了两种浮点类型,而最新的标准则至少保证了两种实数类型。实变量可以声明为
real x double precision y
x这是默认类型的实数,并且y是比更大的十进制精度的实数x。在Fortran2008中,十进制精度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
Fortran90引入了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)
通常会打印
48
要么
12
取决于编译器。
可以通过几种方式设置种类编号:
单精度(默认)和双精度:
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)
与2003年的Fortran开始,预先定义的常量都可以通过固有的模块ISO_C_Binding,以确保真正的品种是可互操作的同类型float,double或long_double伴随的C编译器:
useISO_C_Binding
integer,parameter::single_kind=c_float
integer,parameter::double_kind=c_double
integer,parameter::long_kind=c_long_double
从Fortran2008开始,可以通过内部模块使用预定义的常量ISO_Fortran_env。这些常数以位为单位提供具有一定存储大小的实数
useISO_Fortran_env
integer,parameter::single_kind=real32
integer,parameter::double_kind=real64
integer,parameter::quadruple_kind=real128
如果编译器中无法提供某种类型,则返回selected_real_kind()的值或整数常量的值为-1。