我正在学习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编译器。发生了什么事?
答案 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