Fortran 浮点数精度
示例
类型的浮点数real不能有任何实数值。它们可以表示实数,最多可以包含一定数量的十进制数字。
FORTRAN 77保证了两种浮点类型,而最新的标准则至少保证了两种实数类型。实变量可以声明为
real xdouble precision y
x这是默认类型的实数,并且y是比更大的十进制精度的实数x。在Fortran 2008中,十进制精度y至少为10,其十进制指数范围至少为37。
real, parameter :: single = 1.12345678901234567890double precision, parameter :: double = 1.12345678901234567890d0
print *, single
print *, double
版画
1.123456841.1234567890123457
在使用默认配置的常见编译器中。
注意d0双精度常量中的。包含d而不是e用于表示指数的实数文字用于表示双精度。
! Default single precision constant1.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 )与2003年的Fortran开始,预先定义的常量都可以通过固有的模块ISO_C_Binding,以确保真正的品种是可互操作的同类型float,double或long_double伴随的C编译器:
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。
以上是 Fortran 浮点数精度 的全部内容, 来源链接: utcz.com/z/350087.html