Skip to content

Commit cda2ea3

Browse files
authored
docs: added a spoiler with a diagrammatic comparison of the two libraries + added a spoiler with a list of functions + small text editing
Added detailed comparisons and features of PyCustomRand library.
1 parent 5b7b47f commit cda2ea3

File tree

1 file changed

+42
-3
lines changed

1 file changed

+42
-3
lines changed

README.md

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,48 @@
2020
## 📌 Зачем нужна эта библиотека, если есть уже встроенные в Python `random` и `round`?
2121
PyCustomRand писался как альтернатива этим двум встроенным модулям. Вот главные особенности и возможности библиотеки:
2222

23-
* Данная библиотека **проще** написана — весь код закомментирован, лёгок и понятен. В основе реализации генератора псевдослучайных чисел лежит несложный алгоритм (использующий системное время) поэтому библиотеку легко кастомизировать/расширять/дополнять под себя.
24-
* В большинстве своём PyCustomRand выдаёт более *"энтропичный"* результат.
25-
* Библиотека включает в себя все самые главные функции из [оригинальной](https://docs.python.org/3/library/random.html) Python-библиотеки, но только местами улучшенные и упрощённые (например: у `random_integer` (аналог `randint`) можно выбрать, чтобы сгенерированный результат делился на число; результат функции `random_float` можно округлять и пр.)
23+
* Данная библиотека **проще** написана — весь код закомментирован, лёгок и понятен. В основе реализации генератора псевдослучайных чисел лежит *несложный* алгоритм (использующий системное время) поэтому библиотеку легко кастомизировать/расширять/дополнять под себя.
24+
* В большинстве своём PyCustomRand выдаёт более *"энтропичный"* результат при нескольких генерациях подряд по сравнению со встроенным `random`-модулем.
25+
* <details>
26+
<summary>Сравнение на примере</summary>
27+
28+
PyCustomRand демонстрирует **на 173%** более высокую кучность распределения по сравнению со стандартной библиотекой `random` в тестах на **1,000,000** итераций.
29+
30+
<img src="https://i.imgur.com/qxYdxmD.png">
31+
32+
Данные для диаграммы брались из тестирования, которое проводилось с помощью встроенного модуля диагностики (`check_distribution`). По результатам PyCustomRand показал максимальное отклонение **в 2.7 раза** меньше, чем стандартный `random` (0.0267% против 0.0730%).
33+
34+
<table align="center" style="border-collapse: collapse;">
35+
<!-- Строка с заголовками -->
36+
<tr>
37+
<th align="center" style="font-family: sans-serif">
38+
PyCustomRand
39+
</th>
40+
<th align="center" style="font-family: sans-serif">
41+
Python Built-in
42+
</th>
43+
</tr>
44+
<!-- Строка с картинками -->
45+
<tr>
46+
<td align="center" width="50%">
47+
<img src="https://i.imgur.com/kH26JEO.jpeg" width="100%" alt="PyCustomRand">
48+
</td>
49+
<td align="center" width="50%">
50+
<img src="https://i.imgur.com/LdFoREN.jpeg" width="100%" alt="Python Built-in">
51+
</td>
52+
</tr>
53+
</table>
54+
</details>
55+
* Библиотека включает в себя все самые главные функции из [оригинальной](https://docs.python.org/3/library/random.html) Python-библиотеки, но только местами улучшенные и упрощённые (например: `random_integer` может выдавать сгенерированный результат, делимый на заданное число из диапазона; результат функции `random_float` можно округлять и пр.)
56+
* <details>
57+
<summary>Список функций</summary>
58+
59+
* Генерация целых чисел (`random_integer`, `randrange`, `gen_random_number`).
60+
* Генерация вещественных чисел (`random`, `random_float`).
61+
* Поддержка статистических распределений: Нормальное (Гаусс), Треугольное, Экспоненциальное, Биномиальное.
62+
* Инструменты для последовательностей: выбор случайного элемента (`choice`), выборка с весами (`choices`), перемешивание (`shuffle`) и выборка уникальных элементов (`sample`).
63+
* Инициализация («посев») последовательности генератора псевдослучайных чисел (`set_seed`, `_get_next_seed_state`).
64+
</details>
2665
* Также библиотека имеет дополнительные утилиты, полезные для разработки веба/игр: генерация UUID v4, случайных HEX-цветов (например, `#ff05a1`), случайных байт, случайных булевых значений (`True`/`False`) с настраиваемым шансом.
2766
* Имеется модуль собственного честного округления - `true_round`. Функция округляет числа привычным математическим способом (0.5 всегда вверх по модулю), а также исправляет погрешности плавающей точки (например, "проблему 2.675").
2867
* Код покрыт unit-тестами (чему соответствует badge в начале README), также имеется встроенный модуль диагностики (`check_distribution`), который позволяет в любой момент проверить равномерность распределения генератора.

0 commit comments

Comments
 (0)