У меня есть две функции: первая генерирует случайные числа, а вторая делает симуляцию для аппроксимации значения pi.Исправить код, чтобы избежать повторных значений в случайном генерации. VB.Net
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 в моем коде?
Вы попробовали поиск в Google на «vb.net генерировать случайное число без повторения»? Например, http://stackoverflow.com/questions/17666175/random-numbers-in-array-without-any-duplicates, также что такое 'contador'? – Neolisk
Похоже, вы ищете алгоритм перетасовки, а не случайный алгоритм. Если ваш «мин» всегда равен 0, почему бы просто не получить случайное число от 0 до 1? –
Контадор подсчитывает количество точек внутри четверти круга, а n - количество точек внутри квадрата. – CreamStat