Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
1 / 1 / 0
Регистрация: 05.05.2020
Сообщений: 186

Рандомайзер

07.12.2021, 22:22. Показов 4598. Ответов 49
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как можно реализовать максимально рандомный рандомайзер от 0 до 32767 через rand()

Пробовал через библиотеку <time.h>
Но там числа буквально на единицу отличаются друг от друга
А других вариантов особо и не нашёл, везде описана дефолтная работа функции
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.12.2021, 22:22
Ответы с готовыми решениями:

Рандомайзер
Задание: создать масив чисел, память под масив выделить динамически. В ячейки масива занести рандомные числа, найти и вывести на экран...

Рандомайзер не работает
Добрый день! Почему-то не работает рандомайзер, выдает одинаковые значения... Хотя srand(time(0)) прописан. В итоге нужно заполнять...

Рандомайзер слов на C++
Создание рандомайзера слов в вижуал студио 2010 На c++

49
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,316
12.12.2021, 18:05
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от hoggy Посмотреть сообщение
формулы извлечения псч в нужном диапазоне,
которые используют отстаток от деления,
дают результат с более худшим распределением,
в сравнении с базовым RND
Нормальный результат распределения дают, я же показал. Всех цифр примерно поровну. Ну давайте посмотрим 100 000 раз, каждой цифры должно быть приблизительно по 10 000. И при разных значениях srand(). Я уж не знаю, как ещё пробовать?
Миниатюры
Рандомайзер  
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
12.12.2021, 18:21
Уважаемый hoggy все правильно сказал. Именно это я и имею в виду.

Позволю себе заметить лишь, что на практике равномерное распределение происходит в каком-то диапазоне [A:B] длинной D.

В случае если сужать диапазон до длины X, то равномерность сохранится в случае если D mod X == 0.
0
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,316
12.12.2021, 21:05
Ну хорошо. Хочется конкретики. В моём случае:
C++ (Qt)
1
x = (x * 379 + 1) % 32771;
на каком диапазоне [A:B] длинной D будет равномерное распределение, и при какой длине Х равномерность не сохранится?
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
12.12.2021, 21:22
Давайте попробую еще раз объяснить.
Цитата Сообщение от hoggy Посмотреть сообщение
штука в том, что если принять за истину, что RND даст распределение K
тогда RND % X даст распределение B,
где B хуже чем K
Поясню на пальцах. Допустим.
C++
1
2
3
4
5
int my_rand(int x)
{
    x = (x * 379 + 1) % 32771;
    return x;
}
Если принять за истину, что функция my_rand даст равномерное распределение в диапазоне между 0 и 32771,
тогда my_rand() % 30000 даст менее равномерное распределение с небольшим перекосом в сторону первых 2771 чисел.

Смысл в том, что даже если my_rand равномерно распределяет в диапазоне между 0 и 32771, при обрезании диапазона с помощью остатка от деления например my_rand() % 30000 получившиеся значения не будут равномерно распределены между 0 и 30000 с легким перекосом в сторону первых чисел.

Цитата Сообщение от lemegeton Посмотреть сообщение
Позволю себе заметить лишь, что на практике равномерное распределение происходит в каком-то диапазоне [A:B] длинной D.
В случае если сужать диапазон до длины X, то равномерность сохранится в случае если D mod X == 0.
Моё несущественное замечание говорит лишь о том, что если бы диапазон делился на что-то кроме себя и единицы, то при приведении к другому кратному диапазону через остаток от деления сохранялось бы равномерное распределение.

Например, если бы функция rand() равномерно распределяла значения между 0 и 1000, то при сокращении диапазона до 100 с помощью rand() % 100 получившиеся значения были бы всё равно равномерно распределены.
0
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,316
12.12.2021, 22:17
Цитата Сообщение от lemegeton Посмотреть сообщение
Если принять за истину, что функция my_rand даст равномерное распределение в диапазоне между 0 и 32771,
тогда my_rand() % 30000 даст менее равномерное распределение с небольшим перекосом в сторону первых 2771 чисел.
Теоретически да. Практически это ни на что не повлияет. Во первых, редко встречаются задачи, в которых требуются все 30000 случайных чисел. 2, 4, 8, 10, 16, ну 256 для шифрования байтов - на таких количествах перекос будет меньше влияния "случайности". Во вторых, для больших чисел и база должна быть существенно больше. Кстати, для std::rand она равна не то 2, не то 4 млрд. - более чем достаточно, что-бы погрешность стала ничтожной.
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
12.12.2021, 23:12
Цитата Сообщение от alexu_007 Посмотреть сообщение
Практически это ни на что не повлияет.
В каких-то простых случаях -- безусловно ни на что не повлияет.
В специфичных случаях, когда нужно равномерное распределение с гигантским количеством генерируемых случайных чисел -- может и повлиять.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
12.12.2021, 23:59
Цитата Сообщение от lemegeton Посмотреть сообщение
когда нужно равномерное распределение
это уже не рандомный случай ))
Да и вообще по теме, ну тут много вариантов.

Добавлено через 3 минуты
lemegeton, одна твоя ошибка из-за которой начался ваш бессмысленный спор.
Это ваш неудачный пример :
std::uniform_int_distribution<unsigned char> random(0, 15);

// заведем счётчик
std::unordered_map<unsigned char, std::size_t> counter;

// сгенерим немножко случайных чисел
for (int i = 0; i < 15000; ++i) {
++counter[random(gen) % 10]; // обрежем у них диапазон
там где из 15 случайных чисел выбиралось лишь 5

Добавлено через 1 минуту
lemegeton, генерация случайных чисел до сих пор актуальный предмет многих ученых.
Почему нельзя сказать что случайных чисел не существует, в природе, вообще ))) ???
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,538
Записей в блоге: 1
13.12.2021, 00:00
Значения больше и меньше середины диапазона распределяются как 66% к 33%
если диапазон задан от 0 до RAND_MAX / 3 * 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <cstdlib>
#include <ctime>
 
 
using namespace std;
int main()
{
    srand(time(NULL));
    int a = 0, b = RAND_MAX / 3 * 2, mid = RAND_MAX / 3;
    int cnt_greater = 0, cnt_less = 0;
    for (int i = 0; i < 1000000; ++i)
    {
        int rnd = rand() % (b - a + 1) + a;
        if (rnd > mid) ++cnt_greater;
        else ++cnt_less;
    }
    cout << "greater " << 100 * cnt_greater / (cnt_greater + cnt_less) << "%" << endl;
    cout << "less " << 100 * cnt_less / (cnt_greater + cnt_less) << "%" << endl;
    return 0;
}
1
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
13.12.2021, 00:02

Не по теме:

Kuzia domovenok, слушай, может мы в одном городе живем ? лол )



Добавлено через 32 секунды
Или ты за одну минуту наваял код .
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
13.12.2021, 05:17
Цитата Сообщение от SmallEvil Посмотреть сообщение
одна твоя ошибка из-за которой начался ваш бессмысленный спор
В этом коде нет ошибки. Он призван был продемонстрировать, что ограничение диапазона равномерно распределённых случайных величин методом взятия остатка может привести к неравномерному распределению величин внутри нового диапазона.

Цитата Сообщение от SmallEvil Посмотреть сообщение
Почему нельзя сказать что случайных чисел не существует, в природе, вообще ))) ???
Вроде как и нет, а вроде как и есть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.12.2021, 05:17

Почему не работает рандомайзер
Ошибок не выдаёт, но всё время выдаёт 0 #include &quot;pch.h&quot; #include&lt;iostream&gt; #include&lt;fstream&gt; #include &lt;string&gt; #include...

Неправильно работает рандомайзер в стеке
Рандомайзер выдаёт только одно число в стеке. #include &lt;iostream&gt; #include &lt;stack&gt; // подключаем библиотеку для // использования...

Рандомайзер
Такой вопрос мне получается нужно сделать чтоб рандом выдавал степенные числа 2 и 3х. Как это возможно реализовать. Буду благодарен за...

Простой рандомайзер
Уважаемые форумчане, доброго времени суток! Мне понадобилась реализация генератора псевдослучайных чисел от 0 до 8. Я придумал следующее: ...

Рандомайзер с условием
Ребятки, хелп!:senor: Создал рандомайзер в VBA Excel: Private Sub CommandButton1_Click() Dim i As Byte Dim Rand As Range ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
50
Ответ Создать тему
Новые блоги и статьи
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru