我想查看 gfortran 的整数种类
所以我写了这一行
write(*,"(1X,I20,'correspond to kind ',I2)"),11111111111,kind(11111111111)
Run Code Online (Sandbox Code Playgroud)
会有编译错误说
test.f90:67:57 类型的精度:错误:整数对于 (1) 处的同类来说太大了。可以使用选项 -fno-range-check 禁用该检查
所以我尝试用-fno-range-check
. 但它给出了结果
-1773790777对应种类4
怎么了?另一方面,intel fortran 没有给出错误和正确答案
无论您输入什么值1 ,没有任何种类指定的整数文字始终是默认种类。因此,即使询问也没有多大意义
kind(111111111111)
只要值有效,任何此类文字的类型始终是默认类型。所以与kind(1)
.
所有整数类型的值范围都是有限的。您可以使用的最大的一个
write(*,*) HUGE(1)
Run Code Online (Sandbox Code Playgroud)
在这里,1
您可以使用您检查的整数类型的任何其他常量或变量。大多数情况下,HUGE
will的默认值2147483647
对应于 32 位整数。
要使用更大的整数文字常量,请使用更大的非默认类型。
是否使用 Fortran 90 中的方法并不重要:
integer, parameter :: lk = selected_int_kind(15)
write(*,*) 11111111111_lk
Run Code Online (Sandbox Code Playgroud)
或来自 Fortran 2008
use iso_fortran_env
integer, parameter :: lk = int64
write(*,*) 11111111111_lk
Run Code Online (Sandbox Code Playgroud)
两者都会起作用。当然kind(11111111111_lk)
会返回 的值lk
。
1那是标准的 Fortran。一些编译器可能会为您将大值提升为更大的类型,但仅作为非标准扩展。当转向保持标准行为的编译器时,您可能会感到不愉快。