С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
 Аватар для rialbat
2 / 2 / 0
Регистрация: 14.09.2018
Сообщений: 47

Генерация случайных значений от 0 до 1

29.04.2021, 14:07. Показов 1579. Ответов 9

Студворк — интернет-сервис помощи студентам
Здравстуйте, необходимо сгенерировать случайное число от 0.0 до 1.0, написал следующий код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <random>
#include <iostream>
 
typedef std::tr1::ranlux64_base_01 EngineToUse;
typedef std::tr1::normal_distribution<double> DistribToUse;
 
int main() {
       EngineToUse eng;
       eng.seed((unsigned int) time(NULL));
       DistribToUse dist(0,1);
 
       dist.reset();
       double rndNumber = dist(eng);
       std::cout << rndNumber << std::endl;
 
       return (0);
}
Но он возвращает отрицательные значения и значения больше 1, что необходимо исправить?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.04.2021, 14:07
Ответы с готовыми решениями:

Запрос на генерация случайных значений
Добрый день, есть такая задача: В таблице USERS_DATA следующего формата ведется информация о сотрудниках курьерской службы: Ссылка...

Генерация случайных значений по маске
Требуется реализовать генерацию случайных значений по маске. Например A - большая буква, a - маленькая буква, D - цифра.... как то так. ...

Генерация случайных неповторяющихся значений
Хочу заставить рандом, что если есть повторяющиеся элементы, то он бы заново рандомил массив, до тех пор пока не будет всех различных...

9
 Аватар для matviiv
429 / 313 / 129
Регистрация: 09.02.2021
Сообщений: 1,096
Записей в блоге: 1
29.04.2021, 14:19
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
 
int main() {
    system("chcp 1251>nul");
    srand(time(NULL));
    float r = static_cast <float> (rand()) / static_cast <float> (RAND_MAX);
    cout << r << endl;
    system("pause>nul");
    return 0;
 
}
Я б написал так

Добавлено через 1 минуту
Цитата Сообщение от rialbat Посмотреть сообщение
time(NULL));
подключите библиотеку ctime ,здесь ошибка
0
 Аватар для rialbat
2 / 2 / 0
Регистрация: 14.09.2018
Сообщений: 47
29.04.2021, 14:28  [ТС]
Благодарю за предложение, но хочется именно с этим распределение разобраться. time() компилятор подхватыват из time.h, ошибок не выдает.
1
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
29.04.2021, 14:47
Лучший ответ Сообщение было отмечено rialbat как решение

Решение

Цитата Сообщение от rialbat Посмотреть сообщение
но хочется именно с этим распределение разобраться
https://ru.wikipedia.org/wiki/... 0%B8%D0%B5
Цитата Сообщение от rialbat Посмотреть сообщение
dist(0,1)
Первый параметр - это ожидание, второй - отклонение.
Если вам нужен диапазон 0..1 с наиболее вероятным значением 0,5, то примерно dist(0.5,0.17)

Только это не гарантирует отсутствие значений вне диапазона, поэтому если они вообще не допустимы, то нужно будет их самостоятельно "обрезать"(например, std::clamp(dist(eng), 0.0, 1.0))
1
 Аватар для rialbat
2 / 2 / 0
Регистрация: 14.09.2018
Сообщений: 47
29.04.2021, 15:47  [ТС]
Разобрался, спасибо!

Добавлено через 57 минут
Прошу прощения за ещё один вопрос. При вынесении генерации в отдельную функцию, возвращаемый результат оказывается одним и тем же. Я так понимаю, что он в какой-то момент кешируется?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
typedef std::tr1::ranlux64_base_01 EngineToUse;
typedef std::tr1::normal_distribution<double> DistribToUse;
EngineToUse eng;
DistribToUse dist(0.5,0.17);
 
double rndNumber()
{
    eng.seed((unsigned int)time(NULL));
    dist.reset();
    double rndNum = 0;
    rndNum = dist(eng);
    if (rndNum > 1 && rndNum < 0)
        rndNumber();
    return rndNum;
}
 
 
int main()
{
       for(int i = 0; i < 10; i++)
           std::cout << rndNumber() << std::endl;
       return (0);
}
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
29.04.2021, 15:53
seed зачем многократно делать? И зачем tr1? Компилятор древний, что ли?
1
 Аватар для rialbat
2 / 2 / 0
Регистрация: 14.09.2018
Сообщений: 47
29.04.2021, 16:26  [ТС]
Понял, а какие аналоги tr1 есть?

Добавлено через 7 минут
Просто напрямую обращаться?
C++
1
typedef std::ranlux64_base_01 EngineToUse;
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
29.04.2021, 16:29
Цитата Сообщение от rialbat Посмотреть сообщение
if (rndNum > 1 && rndNum < 0)
rndNumber();
Это всегда false (плюс результат рекурсивного вызова не используется)

C++
1
2
3
4
5
6
7
double rndNumber()
{
    static EngineToUse eng(static_cast<EngineToUse::result_type>(time(NULL)));
    static DistribToUse dist(0.5,0.15);
    double result = dist(eng);
    return result < 0 ? 0 : (result > 1 ? 1 : result);
}
0
 Аватар для rialbat
2 / 2 / 0
Регистрация: 14.09.2018
Сообщений: 47
29.04.2021, 16:40  [ТС]
Ага, этот момент уже учел, спасибо
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
29.04.2021, 18:04
Цитата Сообщение от rialbat Посмотреть сообщение
какие аналоги tr1 есть?
Вот что уже давно есть: https://www.cplusplus.com/reference/random/
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.04.2021, 18:04
Помогаю со студенческими работами здесь

Генерация случайных значений без повторений
Всем привет! У меня проблема, надо рандомно раскидать 4 переменных без повторений, как это можно реализовать? Пока попробовал так, но прога...

Генерация случайных значений типа string
Как можно генерировать string'овые переменные из определенного набора? Например, даны три переменные: &quot;abc&quot;, &quot;def&quot; и...

Генерация случайных значений для BigInteger
Здравствуйте,такой вопрос: Как сгенерировать число n(biginteger) для которого мин значение 2^(140-1)а мах значение 2^140.Ведь для метода...

Генерация случайных чисел в заданном диапазоне значений
Доброе время суток! Помогите написать функцию рандом, которая должна выводить число: 12 +/-6, т.е это либо 6, либо 18. Всем заранее...

Генерация случайных значений для каждого экземпляра
Доброго времени суток. Игра Black Jack. Суть игры обыграть дилера, в данном случае компьютер. У кого 21 тот побеждает, меньше - может...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru