注册 登录
编程论坛 VB6论坛

求助高手帮忙看下,新手,代码溢出问题

hui3643616 发布于 2018-06-12 15:35, 1300 次点击
Option Base 1
Private Sub Command1_Click()

Dim arr() As Integer, m As Integer, i As Integer, a As Integer
For a = 0 To Op1.Count - 1
If Op1(a).Value = ture Then
m = Val(Op1(a).Caption)
End If
Next a
ReDim arr(m)
arr(1) = 1
arr(2) = 1
For i = 3 To m
arr(i) = arr(i - 1) + arr(i - 2)           这里i=24的时候老是溢出,实在找不到原因
Next
Text1.Text = arr(m)
End Sub
3 回复
#2
wmf20142018-06-12 16:50
Dim arr() As Integer改成Dim arr() As long
#3
ZHRXJR2018-06-12 18:28
Dim Arr() As Integer,m=23 时 arr(22)=17711,arr(23)=28657,可知arr(24)=17711+28657=46368,m=24会超出 Integer 的范围了,因此溢出, Integer 的最大值=32757  。
Dim Arr() As Long,m=46    时  arr(45)=1134903170,arr(46)=1836311903,可知arr(47)=2971215073,m=47会超出 Long 的范围了,因此溢出,  Long 的最大值=2147483647   。
Dim Arr() As Single ,m=186 时 arr(185)=2.05697E+38,arr(186)=3.32825E+38, 可知arr(187)=5.38522E+38,m=187会超出 Single 的范围了,因此溢出, Single 的最大值=3.402823E+38   。
Dim Arr() As Double,只测试到 m=500 时 arr(499)=8.61682916002383E+103,arr(500)=1.39423224561698E+104, 远小于 Double 的最大值1.79769313486232E+308,因此没有溢出。但如果 m 够大,超出 Double 的最大值也会溢出的。
那么需要根据你的 m = Val(Op1(a).Caption) 设置 arr 的数据类型,大于23,小于46,使用 Long 数据,大于46,小于186,使用 Single 数据,大于186,使用 Double 数据,但这个上限没有测试,估计在1000以上。

[此贴子已经被作者于2018-6-12 18:30编辑过]

#4
Artless2018-06-12 23:49
arr(22)+arr(23)超过Integer
1