Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2012, 19:21   #1
demigod82
Пользователь
 
Регистрация: 16.01.2012
Сообщений: 35
По умолчанию rand() неправильно работает

Я задаю зерно srand(time(null)) и затем с помощью rand получаю число от 1 до 6, но когда смотрю динамическую статистику выпадения вижу что значения выражений чисел различаются в разы. Меньше всего выпадают 123 а больше 456. Почему так происходит? С моей стороны ошибки не вижу. Инкрементирую переменные и вывожу
demigod82 вне форума Ответить с цитированием
Старый 29.03.2012, 19:47   #2
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Это же рандом. Запустите проверку на 1000000 тестов и увидите, что распределение довольно-таки равномерное
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 30.03.2012, 16:05   #3
demigod82
Пользователь
 
Регистрация: 16.01.2012
Сообщений: 35
По умолчанию

Даже так у меня как будто бы числа кратны. 1 выпала допустим 10 000 раз, 2 20 000 раз и т.д. Причем ничего кроме инкремента значений я не делаю.
demigod82 вне форума Ответить с цитированием
Старый 30.03.2012, 16:14   #4
LiuLiuJons
Форумчанин
 
Регистрация: 28.12.2011
Сообщений: 124
По умолчанию

А вы выложите код, что же вы именно делаете.
"Думай не о задаче, а о решении" (с)
LiuLiuJons вне форума Ответить с цитированием
Старый 30.03.2012, 20:01   #5
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

телепаты в отпуске.
_Bers вне форума Ответить с цитированием
Старый 31.03.2012, 19:23   #6
demigod82
Пользователь
 
Регистрация: 16.01.2012
Сообщений: 35
По умолчанию

С ошибкой я справился, виновато всё моё незнание языка, из за недавнего начала изучение. Теперь значения равномерны. Но каждая цифра в статистике как будто выпадает несколько раз подряд.
Код:
for ( ; ; )
	{
		srand(time(NULL));
		int g=rand()%6+1;
		 switch (g)
		 {
		 case 1:
			 first.a++;
			 break;
		 case 2:
			 first.b++;
			 break;
		 case 3:
			 first.c++;
			 break;
		 case 4:
			 first.d++;
			 break;
		 case 5:
			 first.e++;
			 break;
		 case 6:
			 first.f++;
			 break;
		 }
То есть раз 5 выпадет 1, и т.д.
demigod82 вне форума Ответить с цитированием
Старый 02.04.2012, 11:18   #7
LiuLiuJons
Форумчанин
 
Регистрация: 28.12.2011
Сообщений: 124
По умолчанию

А вы вынесите srand(time(NULL)); из for ( ; ; ) цикла, и тогда разные числа должны получиться.
"Думай не о задаче, а о решении" (с)
LiuLiuJons вне форума Ответить с цитированием
Старый 02.04.2012, 17:35   #8
demigod82
Пользователь
 
Регистрация: 16.01.2012
Сообщений: 35
По умолчанию

Большое спасибо
demigod82 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
rand() не очень работает genrix Общие вопросы C/C++ 4 27.12.2011 10:58
неправильно работает сортировка Brabus Помощь студентам 1 30.05.2010 14:25
Неправильно работает WinExec? TwiX Общие вопросы Delphi 2 26.11.2009 21:07
Скрипт неправильно работает aleksa76 JavaScript, Ajax 4 21.05.2008 17:47
Запрос неправильно работает... yulia БД в Delphi 0 27.05.2007 20:41