运行时错误6 excel中的vba溢出

我正在运行下面的程序,并且在程序到达第一次迭代时得到一个溢出错误。 根据我的理解,这不应该发生,因为我正在使用双倍容量和一个Long,但是由于目前只能达到100,所以不应该出现问题,并且代码在很久以前就会失败。 这是我的原始input:

 h0 = 1000, v0 = 0, a0 = g = -9.80665, dt = .01, m = 752.2528, b = .287875 

这是代码:

 Sub drag() Dim h0 As Double Dim v0 As Double Dim a0 As Double Dim dt As Double Dim m As Double Dim b As Double Dim g As Double Dim i As Long Dim h As Double Dim v As Double Dim a As Double h0 = Worksheets("Drag").Cells(2, 8).Value v0 = Worksheets("Drag").Cells(2, 9).Value a0 = Worksheets("Drag").Cells(2, 10).Value g = Worksheets("Drag").Cells(2, 10).Value dt = Worksheets("Drag").Cells(2, 7).Value m = Worksheets("Drag").Cells(2, 4).Value b = Worksheets("Drag").Cells(2, 5).Value Debug.Print h0 & v0 & a0 & dt & m & b For i = 1 To 100 v = v0 + a0 * dt h = 0.5 * a0 * (dt ^ 2) + v0 * dt + h0 a = m * g - b * (v ^ 2) 'Line where overflow occurs v0 = v h0 = h a0 = a Cells(i + 2, 8) = h0 Cells(i + 2, 9) = v0 Cells(i + 2, 10) = a0 Next i Debug.Print h0 & v0 & a0 & dt & m & b End Sub 

希望这是一个简单的修复。

当i = 14(第14次通过循环)和v = -1.689 x 10 ^ 209时,发生溢出。 我不知道你在做什么,但是v正在炸毁。 如果你描述你正在尝试做什么,这将有所帮助。 – 约翰·科尔曼17分钟前

@John Coleman我现在看到了这个问题,我正在做拖动方程式,我忘了用m来划分一个术语,谢谢。 – Anthrochange 9分钟前

你已经确定了需要做的事情。

现在解释为什么在m * g - b * (v ^ 2)上溢出。 我添加了一个手表,如下所示

考虑截图之前和之后

在计算v = v0 + a0 * dt之前

在这里输入图像描述

在计算v = v0 + a0 * dt

在这里输入图像说明

你在这里看到的是一个非常奇特的行为。 typesDouble改为Integer

这是不正常的,以前经历过。 不幸的是,这个问题在Excel中存在很长一段时间,不幸的是,它也出现在Excel 2016中。只有在使用非常大的数字时才会发生。 这类错误是非常罕见的,但是,它们确实存在。

在使用MOD时,可以有类似的经验,如下面的链接所述

MODfunction

出现溢出的variables是v。您将其定义为double,这意味着您只能将数字放在1.79769313486232 * 10 ^ 308到4.94065645841247 * 10 ^ -324的范围内。 VBA使用8个字节来保存双重数据。 超出此范围的任何数字都会导致溢出。 (有关DBA数据types的更多信息,请参见这里 )

你有多大的期望? 对宇宙primefaces数的粗略估计是1 * 10 ^ 82,双倍数值范围几乎为2 * 10 ^ 308。 如果你需要使用大数字,你将不得不使用不同的 方法,因为它不适合标准的VBA数据types。