По какой-то причине я могу создать только уникальную последовательность длины
5842, а затем повторяется. Но, и это самая странная часть, каждый
Когда я запускаю код, последовательность начинается в другом месте
Это разработано и хорошо известно - вот почему генерация чисел помечена псевдослучайно , а не случайно.
Кстати, я заметил, что вы умножаете два значения. Это может быть не очень хорошая идея - как уже упоминалось здесь .
В вашей функции вы можете попробовать заменить Rnd
на RndDbl
:
Public Function RndDbl(Optional ByRef Number As Single) As Double
' Exponent to shift the significant digits of a single to
' the least significant digits of a double.
Const Exponent As Long = 7
Dim Value As Double
' Generate two values like:
' 0.1851513
' 0.000000072890967130661
' and add these.
Value = CDbl(Rnd(Number)) + CDbl(Rnd(Number) * 10 ^ -Exponent)
RndDbl = Value
End Function
, а затем измените код, включив динамическое начальное число, вызвав Timer
:
Do
v1 = 2 * RndDbl(-Timer) - 1#
v2 = 2 * RndDbl(-Timer) - 1#
rsq = v1 + v2
Loop Until rsq <= 1#
Сгенерированные значения все еще не будут истинно случайными, но не должны принимать форму повторяющейся последовательности.