Elixir:
Генерація випадкових чисел
Як:
Для генерації випадкових чисел у Elixir ви переважно використовуєте модуль :rand
, який надає кілька функцій для цієї мети. Ось швидкий гід для початку роботи:
Перш за все, переконайтеся, що ви ініціалізували генератор випадкових чисел за допомогою унікальної стартової точки:
:rand.seed(:exsplus)
Для генерації випадкового цілого числа у межах діапазону використовуйте:
random_integer = :rand.uniform(10) # Генерує число між 1 та 10
IO.puts(random_integer)
Для випадкового числа з плаваючою комою між 0 та 1.0:
random_float = :rand.uniform()
IO.puts(random_float)
Вам може знадобитися більш конкретний діапазон для чисел з плаваючою комою, що вимагає трохи більше обчислень:
min = 1.5
max = 5.5
random_float_range = min + (:rand.uniform() * (max - min))
IO.puts(random_float_range)
Пам’ятайте, ці числа є псевдовипадковими; вони визначаються посівом та алгоритмом, але цього достатньо для більшості застосунків.
Поглиблений вибір
Можливості генерації випадкових чисел у Elixir опираються на модуль :rand
Erlang, відображаючи його спадщину та тісні зв’язки з Erlang. Модуль :rand
замінив старіший модуль :random
, пропонуючи вдосконалені алгоритми для генерації випадкових чисел. Він надає різноманітні алгоритми, стандартний з яких - exsplus
, але також підтримує інші, як-от exs64
, exsl
та більше, кожен зі своїми компромісами з точки зору швидкості та якості випадковості.
Цікавим аспектом генерації випадкових чисел у Elixir (а отже, і у Erlang) є його поводження з посівами. Система підтримує окремі стани посіву для кожного процесу, забезпечуючи, щоб конкуруючі процеси не втручалися в послідовності випадкових чисел один одного. Це особливо корисно в конкурентних застосунках, забезпечуючи передбачуваність та надійність в розподілених системах.
Хоча модуль :rand
задовольняє потреби більшості випадків використання, застосунки, яким потрібні криптографічно безпечні випадкові числа, повинні розглянути інші опції. Модуль crypto
надає функції, як-от crypto:strong_rand_bytes/1
, що призначені для генерації безпечних випадкових даних, придатних для криптографічних цілей. Ці альтернативи є суттєвими для застосунків, чутливих до безпеки, таких як генерація токенів, шифрування та деякі типи механізмів автентифікації.