vb中如何处理超长数字

来源:百度知道 编辑:UC知道 时间:2024/06/18 00:10:27
要计算类似与这种
1250 * 1250 * 250 * 200 * 100 * 250 * 250 * 33 * 250 * 30 * 15 * 25 * 5 * 200 * 200 * 100 * 100 * 50
的东西,就说溢出,大概50多位,并且我想要精确的数字(超过某一位数vb用科学记数法表示但是前面那个小数还是有位数限制)
或者这个问题可以通过算法来改进?
模型是
一个回合制游戏,一个单位面对最多22种不同数量的不同单位,先射击一次,对面哪个单位被击中完全随机。命中其中18种时,这18种中每种单位都有个固定的P值,使命中后最开始射击的那个单位有(P-1)/P的概率再随机射击一次,求平均的射击次数。
我的算法:
计算100次
d为对方总单位数量
P为每种单位的P值
V为每种单位的数量
Dim t, r, s, c
t = 0
For i = 0 To 99
r = 0
Do Until s = 1
r = r + 1
c = Int(Rnd * (P1 * P2 * P3 * ... * Pn))
If c < P2 * P3 * P4 * ... * Pn * V1 * ( P1 - 1 ) + P1 * P3 * P4 * ... * Pn * V2 * ( P2 - 1 ) + P1 * P2 * P4 * ... * Pn * V3 * ( P3 - 1 ) + ... + P1 * P2 * P3 * ... * P(n-1) * Vn * ( P(n-1) - 1 ) Then
Else
Exit Do
End If
Loop
t = t + r
Next i
输出平均次数 = Val(t / 100)

(1)不算很庞大的计算, 需要参与计算的数 你可以定义为double双精度.
满足你的要求是没问题的
(2)Do Until s = 1 这句后面的s=1多余把
你可以改用:do while....loop结构来吧~

你只需要在第1个乘数前面使用CDBL,就可以了..这样VB会当DB类型来处理,就不会溢出了..

print cdbl(1250) * 1250 * 250 * 200 * 100 * 250 * 250 * 33 * 250 * 30 * 15 * 25 * 5 * 200 * 200 * 100 * 100 * 50

4.5318603515625E+36