|
20 | 20 | ## 📌 Зачем нужна эта библиотека, если есть уже встроенные в Python `random` и `round`? |
21 | 21 | PyCustomRand писался как альтернатива этим двум встроенным модулям. Вот главные особенности и возможности библиотеки: |
22 | 22 |
|
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> |
26 | 65 | * Также библиотека имеет дополнительные утилиты, полезные для разработки веба/игр: генерация UUID v4, случайных HEX-цветов (например, `#ff05a1`), случайных байт, случайных булевых значений (`True`/`False`) с настраиваемым шансом. |
27 | 66 | * Имеется модуль собственного честного округления - `true_round`. Функция округляет числа привычным математическим способом (0.5 всегда вверх по модулю), а также исправляет погрешности плавающей точки (например, "проблему 2.675"). |
28 | 67 | * Код покрыт unit-тестами (чему соответствует badge в начале README), также имеется встроенный модуль диагностики (`check_distribution`), который позволяет в любой момент проверить равномерность распределения генератора. |
|
0 commit comments