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 - Fatal编程技术网

Fortran中的标量值到底是什么,如何进行转换

Fortran中的标量值到底是什么,如何进行转换,fortran,Fortran,一些背景。我有一段代码: function areeq(array1,array2) result(eq) real :: array1(1:100,1:100), array2(1:100,1:100) logical :: eq integer :: x,y,f do x=1,100 do y = 1,100 print *,array1(x:x,y:y) print *,array2(x:x,y:y) if(.not.(array1(x:x,y:y) == ar

一些背景。我有一段代码:

function areeq(array1,array2) result(eq)
real :: array1(1:100,1:100), array2(1:100,1:100)
logical :: eq
integer :: x,y,f
do x=1,100
  do y = 1,100
    print *,array1(x:x,y:y)
    print *,array2(x:x,y:y)
    if(.not.(array1(x:x,y:y) == array2(x:x,y:y))) then
      eq = .false.
      return
    end if

    read *,f
  end do
end do
eq = .true.
return
end function
但是,当我尝试运行它时,它会抛出以下错误消息:

if(.not.(array1(x:x,y:y) == array2(x:x,y:y))) then
       1
Error: IF clause at (1) requires a scalar LOGICAL expression
这是我第二次遇到需要标量的问题,尽管我最后一次设法拼凑了一个临时工作,但我真的应该,也需要,能够正确地处理它们


因此,TL;DR:这段代码有什么问题,在类似这样的情况下,我应该做些什么?

错误的是,正如编译器所抱怨的,您的表达式有一个数组结果,每个比较都有一个元素。您需要的是将表达式包装为ALL()。例如:

if(.not.(all(array1(x:x,y:y) == array2(x:x,y:y)))) then
给定

然后,给出
n

x(n)
x
的数组元素,并且

x(n:n)
x
的数组部分

数组元素是标量,而数组部分本身是大小为1的数组

正如史蒂夫·莱昂内尔所说,在这个问题上

array1(x:x,y:y) == array2(x:x,y:y)
是一个数组值表达式(尽管大小也是1),可以使用
ALL
将其简化为标量表达式。然而

array1(x,y) == array2(x,y)
是标量表达式,包含两个操作数标量数组元素



在参考
x(n)
中,我们有一个标量
n
的数组元素。如果使用
n
数组,我们将使用一个数组作为
x

的向量下标,为什么不简单地删除数组节表示法呢<代码>如果(.not.(array1(x,y)=array2(x,y))您也可以更改为“如果(array1(x,y)/=array2(x,y)),然后”。。。然而,由于array1和array2被定义为实数,因此需要对两个实数的不同程度有一些理解,即可以容忍多小的差异。这些建议都没有帮助,因为IF表达式仍然是一个数组。它必须简化为一个标量,这就是一切所做的。@SteveLionel,
array1(x,y)==array2(x,y)
数组表达式是什么
array1(x,y)
是数组
array1
的一个元素
array2(x,y)
array2
的一个元素。数组元素是标量的。@SteveLionel,我提出了两个建议,这两个建议都没有被采纳。一个是简化if逻辑,另一个是强调比较2个实值的问题。虽然他们可能没有解决OP问题,但他们确实解决了所编写代码的适用性,突出了编码方法的重大问题。
array1(x,y) == array2(x,y)