Floating point 指定整数精度gfortran
我正在处理大于2^31-1的整数,因此我试图将整数变量的精度设置为更高的值。我认为正确的方法是Floating point 指定整数精度gfortran,floating-point,precision,gfortran,Floating Point,Precision,Gfortran,我正在处理大于2^31-1的整数,因此我试图将整数变量的精度设置为更高的值。我认为正确的方法是 PROGRAM f1 IMPLICIT NONE INTEGER,PARAMETER :: LONG = SELECTED_INT_KIND(15) INTEGER(KIND=LONG) :: n n=2**31 END PROGRAM f1 据我所知,这应该允许n位于[-10^15,10^15]。但是,上面的代码使用gfortran 4.6抛出一个编译器错误,即 n=2**31 1 Er
PROGRAM f1
IMPLICIT NONE
INTEGER,PARAMETER :: LONG = SELECTED_INT_KIND(15)
INTEGER(KIND=LONG) :: n
n=2**31
END PROGRAM f1
据我所知,这应该允许n
位于[-10^15,10^15]。但是,上面的代码使用gfortran 4.6抛出一个编译器错误,即
n=2**31
1
Error: Arithmetic overflow at (1)
我试着用
n=int8(2**31)
替换故障线路,但没有用。有什么建议吗?这几乎是重复的,所以我可能会投票结束,但还是这样
在表达式2**31
中,2
和31
都是默认整数,最有可能是32位整数。在将结果分配给n
之前,编译器将根据32位整数和溢出的规则将它们相乘。如果这不是您想要摆弄编译器选项(错误建议)或明确设置文字值的种类(更好)的行为:
(实际上,您不需要将2
和31
都设为长整数,但这并没有坏处。)
n = 2_long**31_long