首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在fortran中初始化8类整数数组?

如何在fortran中初始化8类整数数组?
EN

Stack Overflow用户
提问于 2017-01-03 11:44:27
回答 2查看 3.3K关注 0票数 1

我想在fortran中初始化一个大整数数组,我尝试过:

代码语言:javascript
运行
复制
integer(kind=8) :: XGrid(1:20)

但是整数仍然是默认的kind=4。

代码语言:javascript
运行
复制
XGrid = (/3002, 3340403,....,19460630000/)

我收到一个“这个数字常量超出范围”的错误。因为它不适合于kind=4 int,而将适用于kind=8 int。

我也曾试图宣布它为:

代码语言:javascript
运行
复制
integer, parameter :: ik8 = selected_int_kind(8) 
integer(ik8) :: XGrid(1:20)

但这也不起作用。

编辑:谢谢弗拉基米尔F,但我正在尝试定义一个数组,而不仅仅是一个变量,因此我无法理解如何修改“Is There a Better Double-Precision Assignment in Fortran 90?”中使用的答案:

代码语言:javascript
运行
复制
integer, parameter :: ik8 = selected_int_kind(8) 
integer(ik8) :: XGrid(1:20)_ik8
XGrid = (/3002_ik8, 3340403_ik8,....,19460630000_ik8/)

还是不一样?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-03 12:11:44

首先,kind=8可以是任何东西,它不需要64位.相反,使用来自iso_fortran_enviso_fortran_env要好得多。例如,您可以将自己的命名常量命名为

代码语言:javascript
运行
复制
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还允许定义数组构造函数的类型。

代码语言:javascript
运行
复制
 [ integer(int64) :: ]

但这一点也没有帮助,表达式中的每一个常量都必须是合法的。

票数 6
EN

Stack Overflow用户

发布于 2017-02-20 23:13:59

除了为数组中的每个值指定类型(如@Vladimir所示)之外,您还可以使用编译器选项,以便默认情况下,任何未指定类型的整数都将是8个字节长。

例如,对于Windows,它是:/integer-size:64,或者Linux:-integer-size 64

我还没有试过,但是在gfortran中似乎有类似的选择:-fdefault-integer-8

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41442775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档