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)