Fortran ifort 15中的意外行为
我刚刚在ifort(ifort)15.0.0 2014072中遇到了以下问题Fortran ifort 15中的意外行为,fortran,Fortran,我刚刚在ifort(ifort)15.0.0 2014072中遇到了以下问题 program integerkinds use iso_fortran_env implicit none integer(kind=selected_int_kind(15)):: j15 print *,'Selected Integer Kind 15:' print *, huge(j15) print *, int(huge(j15)) print *, int(huge(j
program integerkinds
use iso_fortran_env
implicit none
integer(kind=selected_int_kind(15)):: j15
print *,'Selected Integer Kind 15:'
print *, huge(j15)
print *, int(huge(j15))
print *, int(huge(j15),kind=selected_int_kind(15))
end program integerkinds
其输出为
Selected Integer Kind 15:
9223372036854775807
-1
9223372036854775807
编译器不应该根据int()的参数自动选择正确的返回类型吗?这一意外行为使我在群集上花费了大约2500小时的计算时间:(
文件说明(第9-80页):
根据此表,整数(8)作为参数应给出整数(8)结果类型为-1,但输出结果为-1。对我来说,这似乎是一个错误,但在我去给英特尔开发人员设置错误之前,我想再看一眼。在标准中,是否有什么我忽略的东西要求将-1作为返回值?否。该表是错误的或误导性的(多行在其他方面毫无意义,可能反映了某些兼容性选项的行为变化,但如果是这样,我不知道它是什么选项)。在标准Fortran中,INT泛型内在函数的结果类型仅取决于kind参数的存在和值。如果不存在kind参数,则结果具有默认整数种类,否则kind参数指定结果的种类 由于没有更改默认整数类型的编译选项,示例程序中第二次调用INT的参数值不能用该编译器的默认整数表示。您的代码不符合要求
虽然文本没有实质性的变化(除了可能变得更加混乱),但我注意到您链接到的文档是古老的。否。该表是错误的或误导性的(多行在其他方面毫无意义,可能反映了某些兼容性选项的行为变化,但如果是这样,我不知道它是什么选项)。在标准Fortran中,INT泛型内在函数的结果类型仅取决于kind参数的存在和值。如果不存在kind参数,则结果具有默认整数种类,否则kind参数指定结果的种类 由于没有更改默认整数类型的编译选项,示例程序中第二次调用INT的参数值不能用该编译器的默认整数表示。您的代码不符合要求 虽然文本没有实质性的改变(除了可能变得更加混乱),但我注意到您链接到的文档是古老的
Argument Type Result Type
INTEGER(1), INTEGER(2), INTEGER(4) INTEGER(4)
INTEGER(1), INTEGER(2), INTEGER(4), INTEGER(8) INTEGER(8)