level 11
因为vb6 Mod函数无法计算大值的取余计算,于是乎手动写了一个
Private Function Mod2(ByVal qwNum As Currency, ByVal qwMod As Currency) As Currency
Dim t@
t = Int(qwNum / qwMod)
t = t * qwMod
Mod2 = qwNum - t
End Function
2021年06月22日 16点06分
3
这里的int会不会出问题呢?我不知道int函数对自变量范围有没有规定。
2021年06月23日 00点06分
level 11
初始化函数及随机数函数为:
Private Sub Init()
m = 2 ^ 32
a = 1664525
c = 1013904223
x = Timer
r = 10
xm = &H21071AD6
End Sub
Private Function Rnd2() As Long
x = CCur(x * a + c)
x = Mod2(x, m)
Rnd2 = Int(x / m * r)
x = Mod2(x, xm)
End Function
2021年06月22日 16点06分
4
level 11
xm = &H21071AD6值的获得通过溢出时跳转获得
Private Sub Test()
Dim i&, t@
On Error GoTo ExitError:
Do
t = CCur(i * a + c)
i = i + 1
Loop
ExitError:
boxEnd = "&H" & Hex(i - 1)
End Sub
2021年06月22日 16点06分
5
level 11
注意,虽然m = 2 ^ 32,但是,r的有效范围=xm=&H21071AD6
毕竟32位程序的一般计算上限在那儿。
2021年06月22日 16点06分
6
level 11
至于有什么用,举个例子,在某些需要随机函数参与的加密算法中,用这种方法可以跨语言/平台加密编码/解码
2021年06月22日 16点06分
7