我有两个功能:第一个产生随机数,第二个产生模拟以接近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值?
答案 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