T,-1
有一种方法可以重新定义分配给T&F的数值值?
是的,这是预期的Intel Fortran的真实确实是-1,因为所有位均设置为1.
。此外,您将整数用作逻辑(布尔)变量完全不可估量。您应该使代码更长几行,并始终进行正确的转换。您的for不允许在福特兰中,许多编译器将拒绝它。如果您放下您可以简单地以标准符合方式转换您的逻辑和整数gfortran会发出警告,但您的表格会导致错误。
integer_var = 1*(node(5,L).gt.0)
1*
if (l) then
x = 1
else
x = 0
end if
MERGE()
.轻松地将fortran逻辑数组转换为整数阵列。 Intel fortran的简单修复可能是Intel Fortran的,它可以切换
WHERE
类型的处理以将任何非零的事物视为true,并使
-fpscomp logicals
恒定等于整数1.要小心,因为它不会使您的程序便携式,它只是在一个特定的编译器中围绕一个可移植性问题起作用。
您可以使用C互操作逻辑类型将定义与英特尔C表示匹配:LOGICAL
这些值将具有+1和0的值,如c99为_bool指示。如果您需要与
.true.
互操作,则必须进行一些简单的转换。 use iso_c_binding
logical(c_bool) :: variable
与int
不兼容。
对Intel编译器的版本进行排序,您可能需要使用
C_int
(或
c_bool
)才能正确
-standard-semantics
。我认为这是不幸的。
正如其他人所说的那样,这种非标准用法的英特尔fortran默认值是,低位设置(奇数)的整数值是真实的,甚至值(低位)是错误的。常数.True。具有-1的位模式。当您进行转换时,它会变得更加复杂,直到版本17,编译器在此过程并不完全一致。请注意,如果您使用-Standard -semantics,则暗示-fpsComp逻辑。
https://software.intel.com/en-us/forums/intel-visual-fortran-fortran-compiler-for-for-windows/topic/275071#comment-1548435,,17 HTTTPS(
Htttps) ://software.intel.com/en-us/articles/intel-fortran-compiler-170-release-notes)有关该版本中有关数字逻辑转换的更改的信息。