我正在使用Intel Fortran在Visual Studio 2012中使用Intel Fortran来编译Fortran代码。 当我尝试使用逻辑运算符时,我注意到独立的逻辑表达式会如预期的那样在t或f中产生。但是,如果我需要数值t或f(0或1),当逻辑结果为t.

问题描述 投票:0回答:1
将输出

T,-1

有一种方法可以重新定义分配给T&F的数值值?
    

是的,这是预期的Intel Fortran的真实确实是-1,因为所有位均设置为1.

此外,您将整数用作逻辑(布尔)变量完全不可估量。您应该使代码更长几行,并始终进行正确的转换。您的for不允许在福特兰中,许多编译器将拒绝它。如果您放下

integer_var = 1*(node(5,L).gt.0)

gfortran会发出警告,但您的表格会导致错误。
您可以简单地以标准符合方式转换您的逻辑和整数

1*
type-conversion fortran logical-operators intel-fortran
1个回答
5
投票
您可以使用

if (l) then x = 1 else x = 0 end if

intisic或使用

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逻辑。
please阅读

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
)有关该版本中有关数字逻辑转换的更改的信息。
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.