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