Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何设置Fortran整数类型_Fortran_Fortran95 - Fatal编程技术网

如何设置Fortran整数类型

如何设置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)

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

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

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不会被几乎任何其他编译器编译。请不要对种类编号使用魔法常数,请参见