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,所以我有一个家庭作业问题: 假设我们有三个维度的数组,A(1000),B(700)和C(200)。进一步假设A从未使用过 与B或C同时使用,但B和C可能同时使用。编写FORTRAN等效程序 语句以尽可能多地共享存储 现在我对编写FORTRAN等价语句一无所知,但我在谷歌上查了一下,对它进行了一些研究。我得到的答案是: EQUIVALENCE(B, C) or EQUIVALENCE((A), (B(1),C(1))) 有人能帮我吗?我该如何着手解决这个问题呢?在进一步讨论之前,我要说,我认为理

所以我有一个家庭作业问题:

假设我们有三个维度的数组,A(1000),B(700)和C(200)。进一步假设A从未使用过 与B或C同时使用,但B和C可能同时使用。编写FORTRAN等效程序 语句以尽可能多地共享存储

现在我对编写FORTRAN等价语句一无所知,但我在谷歌上查了一下,对它进行了一些研究。我得到的答案是:

EQUIVALENCE(B, C) or EQUIVALENCE((A), (B(1),C(1)))

有人能帮我吗?我该如何着手解决这个问题呢?

在进一步讨论之前,我要说,我认为理解/欣赏
等价性是很好的,但这很少是解决现代计算问题的正确工具

我的回答不是告诉你要使用的正确语句。这部分是因为它是家庭作业,但主要是因为没有足够的信息给出完整的答案。稍后再谈

我对这个问题的理解与你的不同

假设A从未与B或C同时使用

等价性
是正确的做法时,内存是昂贵的或有限的。如果我们知道需要两个非常大的数组,但不需要同时使用,我们将使用相同的内存部分来存储这两个变量:在代码中的某些点上,我们将使用它作为,例如,
x
,在某些点上,它的一部分将是
idx
。这是
等效的一种用法,也是这个问题的用法

A
永远不会与
B
C
同时使用,但
B
C
可能同时使用,意味着我们可以在代码中的某些点上为
A
使用相同的内存块,然后部分使用
B
C
,但是前面的
A使用的内存的每个部分都是不同的

equivalence (b,c)
那么,是说错话了。这表示
B
的开头与
C
的开头在相同的内存位置。因此,如果我们改变
b(1)
我们也会改变
c(1)
的值

你应该看看像这样的东西

equivalence (a(1), b(1)) (a(n), c(1))
其中
a(n)
b
存储结束后的存储单元

现在,n应该是什么,如果有,将取决于变量的各种元素的大小。这我们不知道


也许我们可以使用隐式类型(毕竟,有
等价性
)来表示它们都是默认实数,每个元素的长度都相同,在这种情况下,您可以给出答案。

您认为
等价性(b,c)
意味着什么?(也就是说,我们需要解决多少方面的问题?@francescalus我认为这意味着
b
的所有地址都与
c
共享,因此如果
b
c
有共同的内存,这意味着我们不能独立地分配给其中一个变量。我把这个问题理解为问相反的问题:我们希望能够将一块内存用于
a
b
c
(但后者不重叠)。你也是这样回答这个问题的吗?关于,还有一个重要的信息缺失:各种变量的类型是什么?@chw21我在一定程度上同意你的看法。但在我退休后很长一段时间里,仍然会有很多代码在使用,其中有很多人们仍然需要理解的等价性(甚至更糟)。但更重要的是:不要再使用等价性了。(除了可能,可能,如果你真的知道自己在做什么的话)[或者,:(,你被一个不理解
关联
目标的编译器/boss/prof卡住了]