18
Октябрь
2009
Генератор случайных чисел — как получить ряд случайных чисел?
Генератор случайных чисел — как получить ряд случайных чисел?
Function RndGenerator(X As Double) As Double
Const Max = 2000000000
Const Min = 0
Const a2 = 2
Const a3 = 3
Const a4 = 4
Const a5 = 5
Const a6 = 7
Const a7 = 8
Const a8 = 9
Const a9 = 10
Const a10 = 11
Const a11 = 12
Const b2 = 100
Const b3 = 10
Const b4 = 1
Const b5 = 0.1
Const b6 = 0.01
Const b7 = 100
Const b8 = 10
Const b9 = 1
Const b10 = 0.1
Const b11 = 0.01
RndGenerator = (Sin(3.1415926548 * (2 * ((X - Min) / (Max - Min)) - 1)) + 1) / 2
RndGenerator = RndGenerator + a2 * (Sin(b2 * X) + 1) / 2
RndGenerator = RndGenerator + a3 * (Sin(b3 * X) + 1) / 2
RndGenerator = RndGenerator + a4 * (Sin(b4 * X) + 1) / 2
RndGenerator = RndGenerator + a5 * (Sin(b5 * X) + 1) / 2
RndGenerator = RndGenerator + a6 * (Sin(b6 * X) + 1) / 2
RndGenerator = RndGenerator + a7 * (Sin(b7 * X) + 1) / 2
RndGenerator = RndGenerator + a8 * (Sin(b8 * X) + 1) / 2
RndGenerator = RndGenerator + a9 * (Sin(b9 * X) + 1) / 2
RndGenerator = RndGenerator + a10 * (Sin(b10 * X) + 1) / 2
RndGenerator = RndGenerator + a11 * (Sin(b11 * X) + 1) / 2
RndGenerator = RndGenerator / (1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10 + a11)
RndGenerator = RndGenerator * 10 - Int(RndGenerator * 10)
End Function
Private Sub Form_Load()
Dim i As Integer
Dim s As Single
For i = 0 To 20000 Step 1
s=RndGenerator(CDbl(Now + s) * 100)
Debug.Print s
Next i
End Sub
Подкрутив константы — Вы можете получить уникальный генератор случайных чисел!
Как это работает?
Строится сложная синусоида. А значение берется, начиная со 2-го знака после запятой.
Значения принимаются так же, как и стандартным генератором в диапазоне [0,1)