2012-09-26 76 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中的值不需要很大的溢出。