修复代码以避免随机生成VB.Net中的重复值

时间:2014-12-05 16:20:23

标签: vb.net random simulation random-sample

我有两个功能:第一个产生随机数,第二个产生模拟以接近pi的值。

Public Function GetRandom(ByVal Min As Integer, ByVal Max As Integer) As Double

        Static Generator As System.Random = New System.Random()
        Return Generator.Next(Min, Max) / (Max - Min)



    End Function

然后,第一个函数在第二个函数内部生成随机值。我想要的是不重复的抽样:

 Public Function aproxpi(n As Integer) As Double
        Dim contador As Integer = 0




        Dim vector(n, 2) As Double



        For i = 0 To n
  ' (0, 700) is a tuning parameter, I've seen that if I choose ( 0,10000) there's a less precise approximation due to repatead values
            vector(i, 1) = GetRandom(0, 700)
            vector(i, 2) = GetRandom(0, 700)
            If (vector(i, 1) ^ 2 + vector(i, 2) ^ 2) < 1 Then
                contador = contador + 1


            End If
        Next
        aproxpi = 4 * (contador / n)


    End Function

vector(i,1)vector(i,2)(x,y)对。所以我不希望重复(x,y)对。

那么,我怎样才能在我的代码中重复Avod值?

1 个答案:

答案 0 :(得分:0)

如果Min总是0,那么你可以得到一个从0到1的随机数。如果你得到一个从0到1的随机双精度而不是一个整数,你将有更高的机会获得相同的数字两次。最重要的是,我不知道你为什么存储以前的所有数字,在你的例子中不需要它。

这就是为什么我看到你可以改变它的原因。

ApproximatePI(100000)

Public Function ApproximatePI(ByVal totalIteration As Integer) As Double

    Dim r As New Random()
    Dim insideCircle As Integer

    insideCircle = 0

    For n As Integer = 0 To totalIteration
        Dim x As Double = r.NextDouble()
        Dim y As Double = r.NextDouble()

        If (x ^ 2 + y ^ 2) < 1 Then
            insideCircle += 1
        End If
    Next

    Return (4.0 * insideCircle) / totalIteration
End Function