Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Floating point 指定整数精度gfortran_Floating Point_Precision_Gfortran - Fatal编程技术网

Floating point 指定整数精度gfortran

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

我正在处理大于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
Error: Arithmetic overflow at (1)

我试着用
n=int8(2**31)
替换故障线路,但没有用。有什么建议吗?

这几乎是重复的,所以我可能会投票结束,但还是这样

在表达式
2**31
中,
2
31
都是默认整数,最有可能是32位整数。在将结果分配给
n
之前,编译器将根据32位整数和溢出的规则将它们相乘。如果这不是您想要摆弄编译器选项(错误建议)或明确设置文字值的种类(更好)的行为:

(实际上,您不需要将
2
31
都设为长整数,但这并没有坏处。)

n = 2_long**31_long