台灣最大程式設計社群網站
線上人數
1586
 
會員總數:243287
討論主題:188072
歡迎您免費加入會員
討論區列表 >> VB6 >> 溢位的問題
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
溢位的問題
價值 : 100 QP  點閱數:312 回應數:10

樓主

春哥
門外漢
0 2
34 8
發送站內信

各位大大好,小弟在用vb6撰寫利用PSO粒子群演算法在生產排程上時,程式大致上已經差不多了,但是在執行較大的迴圈時,卻出現了溢位的問題
例如我將j設為50、b設為2、iter設為1500(意思為100個批量執行演算法1500次迭代),靜待幾分鐘後即出現「執行階段錯誤'6' 溢位」
想請問各位大大,不知道是否是我的陣列都設定的太大了,或是我使用過多迴圈導致?有什麼方法可以解決這個問題嗎?



搜尋相關Tags的文章: [ VB ] , [ VB6 ] , [ PSO ] , [ 排程 ] , [ 溢位 ] , [ 演算法 ] ,
本篇文章發表於2018-06-03 21:37
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

MSDOS
捐贈 VP 給 MSDOS 檢舉此回應
Private Sub Command1_Click()
Dim i As Long
Dim a(1000) As Integer

For i = 0 To 1500
a(i) = i * 1500
Next
End Sub

執行上面的程式看看
是你的數字太大了,
找一下大數處理的方法看看
本篇文章回覆於2018-06-03 22:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

小魚
檢舉此回應
溢位是因為數字太大了吧,
譬如說int在64位元環境中的大小是4位元組,
也就是說最大是 2147483647(unsigned最大也只能4294967296)
如果超過這個數字就會發生溢位的錯誤...
本篇文章回覆於2018-06-03 22:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

MSDOS
捐贈 VP 給 MSDOS 檢舉此回應
回答後想想怪怪的試跑一下
iter, c, a, Pft, Gft 這幾個沒宣告

Dim Xmax, Xmin, Vmax, Vmin, c1, c2, r1, r2, j, b, k, d, t, i, h, n, g, pb, temp, temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8, temp9, temp10, temp11, temp12, temp13 As Variant
改成底下跑是沒問題的
Dim Xmax, Xmin, Vmax, Vmin, c1, c2, r1, r2, j, b, k, d, t, i, h, n, g, pb, temp, temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8, temp9, temp10, temp11, temp12, temp13, iter, c, a, Pft, Gft As Variant

因該是數值溢位沒錯
本篇文章回覆於2018-06-03 22:57
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

春哥
檢舉此回應
MS、小魚大大:謝謝MS大大提醒宣告加上去。我給定j=50、b=2的情況下,iter給100、300、600都只是他的重複更新數值次數而已,並不會使得數字大量的增加呀!因為我在這100、300、600的迭代環境下去看出來的值都是相近的,並不會有太大的變動,而我run程式時iter超過873次時就會在70行的"Next h"出現溢位問題...,而演算法也是為了讓數值趨於更小,所以真的會是在數值方面溢位嗎?
本篇文章回覆於2018-06-04 04:10
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

春哥
檢舉此回應
更正:應該這樣講,當超過700以上時就會開始出現溢位了,只是出現的頻率隨迭代數越高越容易出現
本篇文章回覆於2018-06-04 04:29
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
不錯的參考

小魚
檢舉此回應
我只有VB.NET,
沒辦法使用Variant,
Variant可能是讓系統自己決定變數型態吧,
那你就要看他決定的是什麼型態,
70行剛好是產生變數,
你要去看看變數的範圍在哪裡,
有沒有可能超過VB自己決定的型態的最大值,
建議最好是明確定義變數的型態,
比較容易找出問題。

p.s.我把程式改成VB.NET再改一改是可以執行的,
當然我覺得你這個是機率問題,
之所以1500比較容易發生,
是因為資料量越大,
變數出現比較大的數目的機率越高,
發生溢位的機率越高。
本篇文章回覆於2018-06-04 08:40
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

小魚
檢舉此回應
說錯了,
好幾個地方我是在說 亂數 不是 變數...
本篇文章回覆於2018-06-04 08:49
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
最有價值解答

Ader Chen
檢舉此回應

參考看看:


本篇文章回覆於2018-06-04 12:42
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

春哥
檢舉此回應
TO 小魚:我的電腦就是因為還不夠好,跑visual studio 2017會超lag所以才用VB6.0的 ^__^'',後來我也覺得是變數的問題,但就是想不透,但是經過Ader Chen大大的點醒後才知道原來變數無法全部在一起設定就可以跑了~
TO Ader Chen:真的很感謝您的細心,我從以前就是這樣設定,第一次出現這樣的問題,很感謝您抓出我的癥結點,程式也能如期跑到1500都沒問題了,謝謝您!
本篇文章回覆於2018-06-04 19:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
回應

小魚
檢舉此回應
這果然是有用過VB6才會踩到的坑...
本篇文章回覆於2018-06-04 20:28
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.