我想在fortran中初始化一个大整数数组,我尝试过:
integer(kind=8) :: XGrid(1:20)但是整数仍然是默认的kind=4。
XGrid = (/3002, 3340403,....,19460630000/)我收到一个“这个数字常量超出范围”的错误。因为它不适合于kind=4 int,而将适用于kind=8 int。
我也曾试图宣布它为:
integer, parameter :: ik8 = selected_int_kind(8)
integer(ik8) :: XGrid(1:20)但这也不起作用。
编辑:谢谢弗拉基米尔F,但我正在尝试定义一个数组,而不仅仅是一个变量,因此我无法理解如何修改“Is There a Better Double-Precision Assignment in Fortran 90?”中使用的答案:
integer, parameter :: ik8 = selected_int_kind(8)
integer(ik8) :: XGrid(1:20)_ik8
XGrid = (/3002_ik8, 3340403_ik8,....,19460630000_ik8/)还是不一样?谢谢
发布于 2017-01-03 12:11:44
首先,kind=8可以是任何东西,它不需要64位.相反,使用来自iso_fortran_env的iso_fortran_env要好得多。例如,您可以将自己的命名常量命名为
integer, parameter :: ìp = int64但更重要的是,
(/3002, 3340403,....,19460630000/)
是一个默认的整数数组表达式,没有任何信息可以使它成为8类。=赋值之前的内容是不相关的。表达式不关心其上下文。Se还Is There a Better Double-Precision Assignment in Fortran 90?
你必须指明哪种
(/3002_8, 3340403_8,....,19460630000_8/)
或者更好
(/3002_int64, 3340403_int64,....,19460630000_int64/)
(或_ip)
Fortran 2003还允许定义数组构造函数的类型。
[ integer(int64) :: ]但这一点也没有帮助,表达式中的每一个常量都必须是合法的。
发布于 2017-02-20 23:13:59
除了为数组中的每个值指定类型(如@Vladimir所示)之外,您还可以使用编译器选项,以便默认情况下,任何未指定类型的整数都将是8个字节长。
例如,对于Windows,它是:/integer-size:64,或者Linux:-integer-size 64。
我还没有试过,但是在gfortran中似乎有类似的选择:-fdefault-integer-8
https://stackoverflow.com/questions/41442775
复制相似问题