2012-09-26 154 views
2

存在此代碼的問題。 我的編碼如下:VBA宏溢出

fitvalchild1 = 0 
    fitvalchild2 = 0 

    For i = 1 To 30        
     counter = 30 

     Do While counter > 0 
      fitvalchild1 = fitvalchild1 + child1(counter) * 2^(i - 1) 
      fitvalchild2 = fitvalchild2 + child2(counter) * 2^(i - 1) 
      counter = counter - 1 
     Loop 
    Next i 

所有的變量聲明爲長...

不過我得到的錯誤:溢出而行強調的是:

fitvalchild1 = fitvalchild1 + child1(counter) * 2^(i - 1) 
+0

那麼,child1()數組中有什麼? – RBarryYoung

+0

如果child1(計數器)= 4,當i = 30時,將發生溢出。 –

+0

兩個子數組都包含一個二進制代碼,其中每個數組都包含一個位。例如child1(1)可以等於1或0等等 –

回答

6

Long數據類型的最大大小爲2,147,483,647。
2 ^(30-1)= 536,870,912
因此,根據child1(counter)和的值,您很容易超過最大值。

你正在爲每個循環添加值,所以在4-5循環之後,你可能會得到錯誤。

如果您不介意從整數類型切換,則可以嘗試使用Currency數據類型。它的最大尺寸爲922,337,203,685,477.5807

+2

十進制類型怎麼樣? – JeffO

+1

@JeffO - 好點。 「小數」給你一個更大的範圍,甚至可能更好的精度......也許取決於需求。你也可以嘗試'Variant'並讓系統決定如何存儲它。 –

1

長數據類型的範圍是-2,147,483,648到2,147,483,647。由於2^29非常接近極限,因此child1和child2中的值不需要很大的溢出。