Randomize
 
Выбирает генератор случайных чисел.

Синтаксис

Declare Sub Randomize ( ByVal seed As Double = -1.0, ByVal algorithm As Integer = 0 )

Использование

Randomize [ seed ][, algorithm ]

Параметры

seed
Double отбираемое значение для генератора случайных чисел. Если параметр опущен, будет использоваться значение основанное на Timer.
algorithm
Значение Integer , используемое для выбора алгоритма. Если параметр опущен, используется алгоритм по умолчанию для текущего Диалекта языка.

Описание

Задает случайное число, которое помогает функции Rnd генерировать случайные числа, и выбирает алгоритм для использования. Допустимые значения для algorithm :

0 - По умолчанию для текущего Диалекта языка. Этот алгоритм 3 в диалекте -lang fb, 4 в диалекте -lang qb  и 1 в диалекте -lang fblite.
1 - Используется функция rand() из C runtime. Это даст разные результаты в зависимости от платформы.
2 - Использует быстрая реализация. Это должно быть стабильным на всех платформах и предоставляет 32-разрядную гранулярность, разумную степень случайности.
3 - Используется алгоритм Mersenne Twister. Это должно быть стабильным на всех платформах, предоставляет 32-разрядную гранулярность и дает высокую степень случайности.
4 - Использует функцию, которая должна дать ту же последовательность случайных чисел, как в QBASIC. Это должно быть стабильным на всех платформах и обеспечивает 24-битную точность, с низкой степенью случайности.
5 - На Win32 и Linux, используются возможности системы (Win32 Crypto API, Linux /dev/urandom) , предоставляя криптографические случайные числа. Если эти системы API-интерфейсы отсутствуют, вместо него используется алгоритм 3.

Для любого заданного числа, каждый алгоритм будет производить конкретную, детерминированную последовательность чисел для этого числа. Если вы хотите, чтобы каждый вызов Randomize производил различные последовательности чисел, следует использовать значение, которое не является вполне предсказуемо - например, значение, возвращаемое из Timer. Опуская параметр seed , будет использоваться значение, основанное на Timer.
Примечание: используя значение Timer непосредственно в качестве параметра будет производить тот же семя, если использовать функцию более одного раза в ту же секунду. Как правило, не стоит вызывать Randomize дважды, так как вторая последовательность не будет более случайной, чем первая. В большинстве случаев, Mersenne twister должен обеспечить достаточную случайную последовательность чисел, не требуя вызов Randomize между вызовами Rnd.


При вызове Randomize с QB совместимым алгоритмом, часть старого случайного числа сохраняется. Это означает, что если вы вызываете Randomize несколько раз с тем же начальным значением, вы не получите ту же последовательность каждый раз. Чтобы получить определенную последовательность в QB режиме совместимости, установите seed при вызове Rnd с отрицательным параметром.

Пример

'' Метод алгоритма C rand()
Randomize , 1

'' Печатаем последовательность случайных чисел
For i As Integer = 1 To 10
    Print Rnd
Next


Различия диалектов

Алгоритм , используемый по умолчанию, зависит от текущего используемого диалекта:
    • С диалектом -lang fb, 32 битная функция Mersenne Twister с гранулярностью 32 бит используется.
    • С диалектом -lang qb , функция дает тот же результат, что и Rnd в QB. Гранулярность составляет 24 бита.
    • С диалектами -lang deprecated и -lang fblite , функция из C Runtime , доступная в системе используется. Функция имеет гранулярность 15 бит в Win32, и 32 бита в Linux и DOS.

Отличия от QB

  • Параметр algorithm является новым в FreeBASIC.
  • QBASIC имел только один алгоритм (воспроизведен в FB под алгоритмом номер 4, и устанавливается в качестве значения по умолчанию в диалекте -lang qb).

См. также