Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 梅森捻线器-超出范围异常_Vb.net_Exception_Mersenne Twister - Fatal编程技术网

Vb.net 梅森捻线器-超出范围异常

Vb.net 梅森捻线器-超出范围异常,vb.net,exception,mersenne-twister,Vb.net,Exception,Mersenne Twister,在Mersenne Twister的VB.NET实现中,我得到了一个超出范围的异常,它会定期抛出(下面的错误图像截图): 是否有某种种子和它窒息的迭代?这看起来有点像我的实现(它的输出与其他两个实现的输出相匹配),但有一些区别。我使用init_数组,所以这不是一个随机种子吗?我没有看过整数种子(?)你用什么作为源?末端的回火部分不同于初始genrand64中的5489UL,它是默认种子,但您可以使用其他种子。对于一个给定的种子,还有数千个MT值的列表(在某处),你可以用来验证你的实现-是吗?还有

在Mersenne Twister的VB.NET实现中,我得到了一个超出范围的异常,它会定期抛出(下面的错误图像截图):


是否有某种种子和它窒息的迭代?这看起来有点像我的实现(它的输出与其他两个实现的输出相匹配),但有一些区别。我使用init_数组,所以这不是一个随机种子吗?我没有看过整数种子(?)你用什么作为源?末端的回火部分不同于初始genrand64中的
5489UL
,它是默认种子,但您可以使用其他种子。对于一个给定的种子,还有数千个MT值的列表(在某处),你可以用来验证你的实现-是吗?还有一个NuGet包:MathNet,其中包括MT。有一个bug,但我报告了它,他们确实修复了它-奇怪的是,我试图用他们的来验证我的。如果NuGet包不在VB.NET中,那么它将超出我快速实现的需要。我可以快速从C++和C语言转换为VB.NET,但是你从来没有作者的保证它工作。有一个种子和迭代它窒息?这看起来有点像我的实现(它的输出与其他两个实现的输出相匹配),但有一些区别。我使用init_数组,所以这不是一个随机种子吗?我没有看过整数种子(?)你用什么作为源?末端的回火部分不同于初始genrand64中的
5489UL
,它是默认种子,但您可以使用其他种子。对于一个给定的种子,还有数千个MT值的列表(在某处),你可以用来验证你的实现-是吗?还有一个NuGet包:MathNet,其中包括MT。有一个bug,但我报告了它,他们确实修复了它-奇怪的是,我试图用他们的来验证我的。如果NuGet包不在VB.NET中,那么它将超出我快速实现的需要。我可以快速地从C++和C语言转换为VB.NET,但是你永远没有作者的保证。
         Private Shared mt(312 - 1) As ULong
         Private Shared mti As ULong = 312 + 1


         Private Function genrand64_int64() As ULong
            On Error GoTo errhandler

            Dim i As Long
            Dim x As ULong
            Static mag01() As ULong = {0UL, MATRIX_A}

            If mti >= NN Then ' generate NN words at one time

                ' if init_genrand64() has not been called, 
                ' a default initial seed is used     
                If mti = NN + 1 Then
                    init_genrand64(5489UL)
                End If

                i = 0
                Do While i < NN - MM
                    x = (mt(i) And UM) Or (mt(i + 1) And LM)
                    mt(i) = mt(i + MM) Xor (x >> 1) Xor mag01(CInt(x And 1UL))
                    i += 1
                Loop
                Do While i < NN - 1
                    x = (mt(i) And UM) Or (mt(i + 1) And LM)
                    mt(i) = mt(i + (MM - NN)) Xor (x >> 1) Xor mag01(CInt(x And 1UL))
                    i += 1
                Loop
                x = (mt(NN - 1) And UM) Or (mt(0) And LM)
                mt(NN - 1) = mt(MM - 1) Xor (x >> 1) Xor mag01(CInt(x And 1UL))

                mti = 0
            End If

            x = mt(mti)   '<<<<<<<<<<<HERE<<<<<<<<<<<<<<<<<<<<<<
            mti += 1

            x = x Xor (x >> 29) And &H5555555555555555UL
            x = x Xor (x << 17) And &H71D67FFFEDA60000UL
            x = x Xor (x << 37) And &HFFF7EEE000000000UL
            x = x Xor (x >> 43)

            Return x
         End Function
   Sub init_genrand64(ByVal seed As ULong)
     mt(0) = seed
     For mti = 1 To NN - 1
       mt(mti) = (6364136223846793005UL * (mt(mti - 1) Xor (mt(mti - 1) >> 62)) + mti)
     Next mti
   End Sub