如何设置Fortran整数类型
这是我的fortran代码的一部分。Num非常大,所以我尝试将其设置为kind=7,但由于某种原因,对于声明Num的行,它仍然抛出错误217-Integer(kind=3)常量超出范围,即使我已经声明Num应该是kind 7。我已经做了一段时间了,我一辈子都不明白为什么它不起作用。非常感谢您的帮助。我的IDE是Plato,如果相关的话,它带有silverfrost编译器。请注意错误是“常量超出范围”,而不是“变量超出范围”。直线中的常数如何设置Fortran整数类型,fortran,fortran95,Fortran,Fortran95,这是我的fortran代码的一部分。Num非常大,所以我尝试将其设置为kind=7,但由于某种原因,对于声明Num的行,它仍然抛出错误217-Integer(kind=3)常量超出范围,即使我已经声明Num应该是kind 7。我已经做了一段时间了,我一辈子都不明白为什么它不起作用。非常感谢您的帮助。我的IDE是Plato,如果相关的话,它带有silverfrost编译器。请注意错误是“常量超出范围”,而不是“变量超出范围”。直线中的常数 program PEU3 integer(kind=7)
program PEU3
integer(kind=7) :: num = 600851475143
integer(kind=7) :: pf, counter
是实际号码:600851475143。默认情况下,编译器似乎希望将常量存储为32位整数,而这个数字太大了
最简单的解决方案是告诉编译器将该常量存储为与num
相同的类型,因此如下所示:
integer(kind=7) :: num = 600851475143
尾随的下划线告诉编译器将常量存储为第7类整数
但是
我需要指出的是,什么数字对应于哪种类型是编译器和机器相关的。也就是说,像这样,代码就不容易转移了
因此,请使用以下构造之一:
对于较新的编译器(符合Fortran 2008),请使用内部iso_Fortran_env
模块:
integer(kind=7) :: num = 600851475143_7
对于较旧的编译器,可以使用selected\u int\u kind
方法找出最佳整数类型。它只接受一个参数:要存储的最大(以10为基数)位数。(虽然从技术上讲,如果您将数字12传递给它,它只能保证介于-10^12…10^12
之间的数字,因此您必须传递13才能确保可以存储您的数字。)
这两种方法更易于阅读,且与编译器无关,因此更易于移植到新系统。请注意错误是“常量超出范围”,而不是“变量超出范围”。直线中的常数
program PEU3
integer(kind=7) :: num = 600851475143
integer(kind=7) :: pf, counter
是实际号码:600851475143。默认情况下,编译器似乎希望将常量存储为32位整数,而这个数字太大了
最简单的解决方案是告诉编译器将该常量存储为与num
相同的类型,因此如下所示:
integer(kind=7) :: num = 600851475143
尾随的下划线告诉编译器将常量存储为第7类整数
但是
我需要指出的是,什么数字对应于哪种类型是编译器和机器相关的。也就是说,像这样,代码就不容易转移了
因此,请使用以下构造之一:
对于较新的编译器(符合Fortran 2008),请使用内部iso_Fortran_env
模块:
integer(kind=7) :: num = 600851475143_7
对于较旧的编译器,可以使用selected\u int\u kind
方法找出最佳整数类型。它只接受一个参数:要存储的最大(以10为基数)位数。(虽然从技术上讲,如果您将数字12传递给它,它只能保证介于-10^12…10^12
之间的数字,因此您必须传递13才能确保可以存储您的数字。)
这两种方法更易于阅读,且与编译器无关,因此更易于移植到新系统。我输入了以下内容:integer,parameter::my_kind=selected_int_kind(13)integer(kind=my_kind)::pf,counter,st pf=0 num=600851475143,但我仍然得到相同的错误:217到分配numIt的值的行,在这种情况下,只需检查
selected\u int\u kind(13)
返回的值即可。对不起,我是新手。我该怎么做?等等,他有可能需要写整型(kind=my\u kind)::num=600851475143\u my\u kind?我已经完全重写了我的答案,请检查你是否还满意。我输入了:integer,parameter::my\u kind=selected\u int\u kind(13)integer(kind=my\u kind)::pf,counter,st pf=0 num=600851475143,但是我仍然得到相同的错误:217到分配numIt's always worth的行,在这种情况下,只需检查selected\u int\u kind(13)
返回的值。对不起,我是新手。我该怎么做?等等,他可能需要写integer(kind=my\u kind)::num=600851475143\u my\u kind
?我已经完全重写了我的答案,请检查您是否仍然满意。使用硬连线kind=7
可以保证您的ode不会被几乎任何其他编译器编译。请不要对种类编号使用魔法常数,请参见硬连线kind=7
您可以保证您的ode不会被几乎任何其他编译器编译。请不要对种类编号使用魔法常数,请参见