分配最大4个字节和8个字节整数时出错

时间:2015-01-01 13:14:18

标签: compiler-errors fortran gfortran

我正在学习Fortran。我遇到了这个错误,但我不知道原因。

INTEGER*1 :: i1
INTEGER*2 :: i2
INTEGER*4 :: i3
INTEGER*8 :: i4

i1 = 2**7 - 1
i2 = 2**15 - 1

i3 = 2**31 - 1 ! giving error
i4 = 2**63 - 1 ! giving error

i4 = 2**31 - 1 ! this also giving error

即使变量大小支持指定的值,我也会得到算术流错误。

我正在使用gfortran 4.8编译器。发生了什么事?

1 个答案:

答案 0 :(得分:2)

问题是右边的表达式是使用默认文字的大小(可能是4个字节)计算的,而不管左边变量的类型。此外,每个子表达式都必须是可计算的,即2**31-1适合4个字节,2**31不会,并抛出错误。

假设您想要查看算术而不是使用huge() 一种方法是这样做:

 integer*8 i
 i=2
 i=(i**62-1)*2+1

 integer,parameter::i8=selected_int_kind(18)
 integer(kind=i8) i
 i=(2_i8**62-1)*2+1