2016-07-07 22 views
-2

我一直在使用FORTRAN程序。我注意到了我正在使用的1D矩陣中看似隨機的變化。它是4000個整數的矩陣。將值逐個添加到矩陣中,從索引1開始,對每個添加的值迭代1。矩陣沒有完全「填滿」,目前只有100個值被放入矩陣中。所以人們會認爲矩陣的前100個條目將不爲零(所有增加的值都是非零的),其餘的3900個條目將爲0.然而,矩陣的幾個條目最終爲大負數,但我確定我的代碼中沒有任何部分涉及這些條目。Fortran的數組條目看起來隨機變化

什麼可能導致此問題?我很抱歉,但我無法發佈代碼供大家使用。

該代碼還有其他幾個大型矩陣,佔用了大約100 MB的空間。這可能是內存問題嗎?

謝謝!

回答

-2

「矩陣」是二維的;你的數組是一維的。

事情不會改變,除非你讓他們改變。

FORTRAN不會初始化標記爲COMMON中的變量(我記得)。因此,他們保證從垃圾值開始。嘗試使用DATA語句初始化您的數據。如果你必須初始化一個帶標籤的COMMON,你將不得不提供一個BLOCK DATA子程序。

+0

謝謝!這似乎已經解決了這個問題。 –

+2

不需要使用通用塊和數據語句,你可以在聲明中初始化變量,如integer :: arr(10,10)= 0。 – haraldkl

+1

對,要清楚,我通過初始化X(:) = 0 –

0

你必須初始化你的數組,否則它幾乎總會包含垃圾。這將做到這一點:

array = 0.0e0 ! real array 

array = 0.0e0 ! double precision 

array = 0 ! integer 
+1

也許注意到兩點。在Fortran中,「初始化」是指特定的內容,而不是顯示的任務。您可能不會將'0.0e0'指定爲雙精度(並且每個示例都有可用的類型轉換)。 – francescalus

+0

您可以使用'= 0'來初始化(定義)任何Fortran數值類型變量。小整數是完全可代表的。 –