如何设置Fortran整数类型

时间:2018-08-17 12:19:17

标签: fortran fortran95

program PEU3
integer(kind=7) :: num = 600851475143
integer(kind=7) :: pf, counter 

这是我的fortran代码的一部分。 Num非常大,因此我尝试将其设置为kind = 7,但是由于某种原因,它仍然抛出错误217-Integer(Kind = 3)常量超出范围,对于声明num的行,即使我已经声明了num应该是友善的7.我已经花了一段时间了,无法理解我的一生,为什么它不起作用。我们非常感谢您的帮助。如果相关的话,我的IDE是Plato,带有silverfrost编译器。

1 个答案:

答案 0 :(得分:6)

请注意错误的原因是“ 常数超出范围”,而不是“ 变量超出范围”。行中的常量

integer(kind=7) :: num = 600851475143

是实际数字:600851475143。默认情况下,您的编译器似乎希望将常数存储为32位整数,而该数字太大了。

最简单的解决方案是告诉编译器将该常量存储为与num相同的常量,因此遵循以下原则:

integer(kind=7) :: num = 600851475143_7

结尾的下划线告诉编译器将常量存储为类型7的整数。

但是

我需要指出,与哪种类型对应的数字取决于编译器和计算机。那样的话,代码将不容易转移。

因此,请使用以下一种结构:

对于较新的编译器(符合Fortran 2008),请使用固有的iso_fortran_env模块:

program PEU3
    use iso_fortran_env, only: int64
    implicit none
    integer(kind=int64) :: num = 600851475143_int64

对于较早的编译器,您可以使用selected_int_kind方法来找出最佳的整数类型。它使用一个参数:要存储的最大数字(以10为基数)。 (尽管从技术上讲,如果将数字12传递给它,则只能保证-10^12 ... 10^12之间的数字,因此必须传递13才能确定您的数字可以存储。)

integer, parameter :: largeint = selected_int_kind(13)
integer(kind=largeint) :: num = 600851475143_largeint

这两种方法都更易于阅读且与编译器无关,因此更容易移植到新系统。