Мне нужен генератор псевдослучайных чисел для моделирования 2D Монте-Карло, у которого нет характерных гиперплоскостей, которые вы получаете с помощью простых LCG. Я проверил генератор случайных чисел Rnd() в Excel 2013, используя следующий код (требуется около 5 секунд для запуска):
Sub ZoomRNG()
Randomize
For i = 1 To 1000
Found = False
Do
x = Rnd() ' 2 random numbers between 0.0 and 1.0
y = Rnd()
If ((x > 0.5) And (x < 0.51)) Then
If ((y > 0.5) And (y < 0.51)) Then
' Write if both x & y in a narrow range
Cells(i, 1) = i
Cells(i, 2) = x
Cells(i, 3) = y
Found = True
End If
End If
Loop While (Not Found)
Next i
End Sub
Вот простой график x vs y для запуска вышеуказанного кода
Не только это не очень случайный взгляд, он имеет более очевидные гиперплоскости, чем печально известный алгоритм RANDU в 2D. В принципе, я использую функцию неправильно или является функцией Rnd() в VBA на самом деле не самым младшим битом?
Для сравнения, вот что я получаю для Mersenne Twister MT19937 в С++.