所以我有一个家庭作业问题:
假设我们有三个尺寸的数组,A(1000),B(700)和C(200)。进一步假设A永远不会被使用 与B或C同时,但B和C可能同时使用。写一个FORTRAN EQUIVALENCE 声明尽可能多地共享存储空间。
现在我对编写FORTRAN EQUIVALENCE语句一无所知,但我在google上查了一下并研究了一下。我得到了这个答案:
EQUIVALENCE(B, C) or EQUIVALENCE((A), (B(1),C(1)))
任何人都可以帮我解决这个问题吗?我将如何解决这个问题?
答案 0 :(得分:2)
在进一步讨论之前,我会说我认为理解/欣赏equivalence
是件好事,但这很难成为解决现代计算问题的正确工具。
我在这里的回答并不是告诉你正确使用的陈述。这部分是因为它是家庭作业,但主要是因为没有足够的信息来提供完整的答案。稍后会详细介绍。
我的解释与你的做法不同。
假设A从未与B或C同时使用
当equivalence
是正确的做事记忆是昂贵的或有限的时候回来。如果我们知道需要两个非常大的数组,但从不需要同时使用,我们将使用相同的内存部分来存储这两个变量:在代码中的某些点我们将它用作比方说,x
,在某些方面,部分内容为idx
。这是equivalence
的一种用法,也是此问题的一种用途。
说A
从未与B
和C
同时使用,但B
和C
可能正在使用同一时间意味着我们可以在代码中的某些点为A
使用相同的内存块,然后部分地使用B
和C
,但每个不同的部分< / em>,早先A
使用的内存。
equivalence (b,c)
然后,说错了。这表示B
的开头与C
的开头位于相同的内存位置。因此,如果我们更改b(1)
,我们也会更改c(1)
的值。
你应该看看像
这样的东西equivalence (a(1), b(1)) (a(n), c(1))
其中a(n)
是指b
存储结束后的存储单元。
现在,这个n应该是什么,实际上如果有的话,将取决于变量的各个元素的大小。我们不知道。
也许我们可以使用隐式类型(毕竟,有equivalence
)来说它们都是默认的实数,每个元素的长度相同,在这种情况下你可以给出答案。