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)



У нас один комментарий на запись “Генератор случайных чисел – как получить ряд случайных чисел?”

Почему бы Вам не высказать свое мнение! Позвольте нам узнать, что Вы думаете...

  1. 1 On 06.04.2010, Сергей said:

    Форма, кнопка, листбокс – что бы проверить на неповторяемость.

    Private Sub Command1_Click()
    q = 0
    For n = 1 To 100 ‘ набор ста случайных чисел
    5 x = Fix(Rnd(10) * 10) + 1 ‘ Rnd(10) – в данном премере диапазон чисел 1-10
    y = Int(Right(Str(Time), 2)) ‘ дополнительный случай – количество секунд на данный момент по часам
    z = x + y
    10 If z > 10 Then ‘ выравнивание в рамках диапазона 1-10
    z = z – 10
    GoTo 10
    End If
    If z = q Then ‘ исключение повторения два раза подряд одного числа
    GoTo 5
    End If
    List1.AddItem z ‘ отображается в листбоксе
    q = z
    Next n

    End Sub

    Вариант написаный «на коленке» для собственных нужд.

Оставить комментарий

Я не робот.


Я сам делал монтаж дымохода в доме. . кирпичный забор.