Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 1
Регистрация: 20.11.2014
Сообщений: 36
1

Некорректно работает рандомизация

04.10.2015, 14:33. Показов 626. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В таком виде написана генерация рандомного числа:
C
1
2
srand(time(NULL));
int f = rand()%7;
при каждом запуске выбрасывается одно и то же число
если поменять 7 на любое другое число - все работает как надо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.10.2015, 14:33
Ответы с готовыми решениями:

Некорректно работает if
Здравствуйте. У меня проблема. Если я указываю такое условие: if ( (i != k) && (j != l) ) то if...

Do while работает некорректно
Не могу понять почему после умножения 2ух переменных я не могу ввести хочу ли я продолжить или нет....

Некорректно работает
Здравствуйте помогите пож-та с задачкой: Сформировать вещественный массив X1(N), N≤20,...

Locate работает некорректно
Вот фрагмент кода, при нажатии на кнопку выводит ошибку, что делать? if...

11
7789 / 6556 / 2984
Регистрация: 14.04.2014
Сообщений: 28,657
04.10.2015, 14:35 2
И сколько раз ты проверил?
0
0 / 0 / 1
Регистрация: 20.11.2014
Сообщений: 36
05.10.2015, 09:54  [ТС] 3
несколько - стабильно выдает четыре
0
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
05.10.2015, 10:13 4
Цитата Сообщение от ivanbelousov Посмотреть сообщение
при каждом запуске выбрасывается одно и то же число
если поменять 7 на любое другое число - все работает как надо
Так работает нормально? Если да, то ошибка в другом месте.
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include<iostream>
#include<ctime>
#include<cstdlib>
 
using namespace std;
int main()
{
    srand(time(0));
    for(int i=0;i<5;++i)
        cout<<rand()%7<<endl;
    return 0;
}
0
0 / 0 / 1
Регистрация: 20.11.2014
Сообщений: 36
05.10.2015, 10:20  [ТС] 5
Renji,
Он выдал разные последовательности с первоначальной четверкой
4 4 4
0 5 3
0 2 6
0 2 1
0 1 5
0
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
05.10.2015, 10:27 6
Значит, какой-то странный косяк в реализации алгоритма генерации случайных чисел. На g++ 4.9.2 эффект не воспроизводится, что первое число, что последнее абсолютно случайны.
0
75 / 75 / 8
Регистрация: 24.09.2015
Сообщений: 342
05.10.2015, 10:39 7
При отладке так и должно быть - если будет разное, то не повторить ошибку, в релиз версии должно все исправиться. Сейчас в ОС и в процессоры встраивают генераторы случайных чисел, а при отладке используется псевдослучайные. Таже вещь и с memcpy, в дебаг версии это будет копирование в цикле, в релиз версии будет использован DMA контроллер и все данные будет скопированы примерно за тоже время как одно данной
0
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
05.10.2015, 10:44 8
Цитата Сообщение от Papayaved Посмотреть сообщение
При отладке так и должно быть - если будет разное то не повторить ошибку, в релиз версии должно все исправиться
Для "повторить ошибку" srand(time(0)) заменяется на srand(1234) (вместо 1234 можно взять любое другое число). И нет, по хорошему, так как у ТС быть не должно. То что у него - признак плохого подбора алгоритма генерации случайных чисел.
0
233 / 99 / 27
Регистрация: 20.03.2014
Сообщений: 304
05.10.2015, 11:25 9
Как вариант, просто 0 в качестве seed дает последовательность чисел, остаток от деления на 7 которых дает 4. Не зря же алгоритм называют "псевдослучайным". Просто при 0 выбрался вектор в таблице из например одинаковых чисел.
0
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
05.10.2015, 11:29 10
Цитата Сообщение от UltraPenguin Посмотреть сообщение
Как вариант, просто 0 в качестве seed дает последовательность чисел, остаток от деления на 7 которых дает 4.
Seed является текущее время. Получение текущего времени через time(0) (оно же time(nullptr) ), это просто такой костыль времен Си, связанный с тем что в Си перегрузку функций не осилили.
0
233 / 99 / 27
Регистрация: 20.03.2014
Сообщений: 304
05.10.2015, 11:30 11
Цитата Сообщение от Renji Посмотреть сообщение
Seed является текущее время
Тьфу точняк... Невнимательно смотрел)
0
7789 / 6556 / 2984
Регистрация: 14.04.2014
Сообщений: 28,657
05.10.2015, 15:08 12
Так сделай:
C++
1
2
srand(time(NULL));
int f = ((double)rand() / RAND_MAX) * 6;
0
05.10.2015, 15:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.10.2015, 15:08
Помогаю со студенческими работами здесь

Некорректно работает программа на С/С++
Запускается программа вот её код #define _CRT_SECURE_NO_WARNINGS #include &lt;windows.h&gt; #include...

ВПР работает некорректно
никто не сталкивался с такой проблемой: ВПР работает не корректно, т.е. есть две таблицы в первой...

Некорректно работает программа
Есть программа с использованием множеств. Задание: напечатайте все целые числа, лежащие в диапазоне...

Функция некорректно работает
Функция компилируется, но постоянно один и тот же ответ. y=0000... Где допущена ошибка? ...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru