初始化 64 位 Mersenne Twister 时出现异常(整数溢出)

Exception (integer overflow) when initializing 64-bit Mersenne Twister

我正在使用 Mersenne Twister 的 64 位版本,具体版本:

 A C-program for MT19937-64 (2004/9/29 version).
 Coded by Takuji Nishimura and Makoto Matsumoto.

并且在编译到 Release 时收到整数溢出,但在 运行 调试期间没有出现异常。 我在高级编译选项中关闭了整数溢出。

在循环内的 mt(mti) = .... 行上抛出异常。

奇怪的是,现在我在调试编译中每隔 运行 次都会遇到这个异常,所以有些东西会潜入 Intel i7 浮点寄存器,这样我就需要断电然后再通电以擦除内存?

最后,为什么在Release中初始化总是抛出异常,而在Debug中却不初始化?

' The array for the state vector 
Friend Shared mt(DefineConstants.NN - 1) As ULong
' mti==NN+1 means mt[NN] is not initialized 
Friend Shared mti As Integer = DefineConstants.NN+1

' initializes mt[NN] with a seed 
Public Shared Sub init_genrand64(ByVal seed As ULong)
    mt(0) = seed
    For mti = 1 To DefineConstants.NN - 1
        mt(mti) = (6364136223846793005UL * (mt(mti - 1) Xor (mt(mti - 1) >> 62)) + mti)
    Next mti
End Sub

有符号整数数据类型只能达到 32 位

无符号整数数据类型只能达到 32 位

对于 64 位数据,您应该使用 LONG 或 ULONG

整数溢出的原因是数据类型不够大,无法容纳您的 64 位数据!

将您的 mti 更改为 LONG 类型

如果您需要使用分数和小数点而不是整数

然后把你的mti改成DECIMAL类型