program PEU3
integer(kind=7) :: num = 600851475143
integer(kind=7) :: pf, counter
Run Code Online (Sandbox Code Playgroud)
这是我的fortran代码的一部分.Num非常大,所以我试图将它设置为kind = 7,但由于某种原因它仍然抛出错误217 - 整数(Kind = 3)常量超出范围,对于声明num的行,即使我已经声明了num应该是善良的7.我已经有一段时间了,并且无法理解为什么它不会起作用.非常感谢帮助.我的IDE是柏拉图,带有silverfrost编译器,如果它是相关的.
注意错误是" 常量超出范围",而不是" 变量超出范围".行中的常量
integer(kind=7) :: num = 600851475143
Run Code Online (Sandbox Code Playgroud)
是实际的数字:600851475143.默认情况下,您的编译器似乎希望将常量存储为32位整数,并且该数字太大.
最简单的解决方案是告诉编译器将该常量存储为与其相同的类型num,所以这些内容如下:
integer(kind=7) :: num = 600851475143_7
Run Code Online (Sandbox Code Playgroud)
尾随下划线告诉编译器将常量存储为类型7的整数.
但
我需要指出,哪个数字对应于编译器和机器相关的类型.这意味着代码不容易转移.
所以请使用以下结构之一:
对于较新的编译器(符合Fortran 2008),请使用内部iso_fortran_env模块:
program PEU3
use iso_fortran_env, only: int64
implicit none
integer(kind=int64) :: num = 600851475143_int64
Run Code Online (Sandbox Code Playgroud)
对于较旧的编译器,您可以使用该selected_int_kind方法找出最佳整数类型.它需要一个参数:要存储的最大(基数10)数字.(虽然从技术上来说,如果你传递数字12,它只能保证数字之间的数字-10^12 ... 10^12,所以你必须通过13才能确定你的号码可以存储.)
integer, parameter :: largeint = selected_int_kind(13)
integer(kind=largeint) :: num = 600851475143_largeint
Run Code Online (Sandbox Code Playgroud)
这两种方法都更易于读取和与编译器无关,因此更容易移植到新系统.