具有三个数组的等价语句

时间:2015-12-10 23:07:48

标签: fortran

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

假设我们有三个尺寸的数组,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)))

任何人都可以帮我解决这个问题吗?我将如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

在进一步讨论之前,我会说我认为理解/欣赏equivalence是件好事,但这很难成为解决现代计算问题的正确工具。

我在这里的回答并不是告诉你正确使用的陈述。这部分是因为它是家庭作业,但主要是因为没有足够的信息来提供完整的答案。稍后会详细介绍。

我的解释与你的做法不同。

  

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

equivalence是正确的做事记忆是昂贵的或有限的时候回来。如果我们知道需要两个非常大的数组,但从不需要同时使用,我们将使用相同的内存部分来存储这两个变量:在代码中的某些点我们将它用作比方说,x,在某些方面,部分内容为idx。这是equivalence的一种用法,也是此问题的一种用途。

A从未与BC同时使用,但BC可能正在使用同一时间意味着我们可以在代码中的某些点为A使用相同的内存块,然后部分地使用BC,但每个不同的部分< / 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)来说它们都是默认的实数,每个元素的长度相同,在这种情况下你可以给出答案。