我正在运行以下程序,一旦程序到达,就会在第一次迭代时出现溢出错误a
。从我的理解来看,这不会发生,因为我使用的Doubles的容量非常大,而且Long却很长,但是由于当前最多只能存储100个,所以这并不重要,并且代码在此之前就失败了。这是我的原始输入:
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正在爆炸。如果您描述您要做什么,这将有所帮助。– John Coleman 17分钟前
@John Coleman我现在看到了问题,我正在执行拖动方程式,但是我忘记了将项除以m,谢谢。– Anthrochange 9分钟前
您已经确定需要做什么。
现在来解释为什么溢出m * g - b * (v ^ 2)
。我添加了一个手表,如下所示
考虑之前和之后的屏幕截图
之前v = v0 + a0 * dt
计算
经过v = v0 + a0 * dt
计算
您在这里看到的是一个非常特殊的行为。类型Double
更改为Integer
这是不正常的,以前已经经历过。不幸的是,此问题在Excel中已经存在很长时间了,不幸的是在Excel 2016中也存在。仅当您使用非常大的数字时才会出现。这些错误很少见,但是确实存在。
MOD
如以下链接所述,使用时可能会有类似的体验
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句