|
Как функцией rand() получить число от 0 до 2 ? |
|
|
|
 |
Ответов
|
Jan 13 2008, 18:45
|
Знающий
   
Группа: Свой
Сообщений: 559
Регистрация: 6-09-06
Пользователь №: 20 131

|
Я прекрасно понимаю что делаю, это вы не понимаете мой код, с чего вы взяли, что я беру остаток от деления? Я беру случайное число, вычитаю из него 2768, чтобы результат был не выше 29999, делаю с ним (unsigned int), чтобы результат не был отрицательным. Далее делю на 10000 и беру результат, а не остаток от деления. В тоге получаю 0,1 или 2.
|
|
|
|
|
Jan 13 2008, 18:51
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(-=Женек=- @ Jan 13 2008, 20:45)  Я беру случайное число, вычитаю из него 2768, чтобы результат был не выше 29999, делаю с ним (unsigned int), чтобы результат не был отрицательным. Далее делю на 10000 и беру результат Вот результат Вы себе и не представляете  . 1. результат зависит от MAX_RAND, который отнюдь не обязан бвть 0x7FFF 2. При подаче на вход случайной последовательности получите искажение исходного распределения вероятности. Цитата , а не остаток от деления. Я учился в школе, по этой причине я не мог говорить, что Вы берете остаток от деления, я говорил, что НАДО ПРОСТО ВЗЯТЬ ОСТАТОК ОТ ДЕЛЕНИЯ. Код Current[y] = rand() % 3;
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 13 2008, 19:14
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(zltigo @ Jan 13 2008, 20:51)  НАДО ПРОСТО ВЗЯТЬ ОСТАТОК ОТ ДЕЛЕНИЯ. Верхняя математика мне давалась тяжело, поэтому вопрос - будет ли остаток иметь такое же распределение, как и исходное число? Интуитивно чувствую, что частное будет, а остаток? Цитата(zltigo @ Jan 13 2008, 19:09)  Сергей! Ты, конечно, не поверишь!! но это правда!!! - твой ответ неверен!!!!  При значении rand() == RAND_MAX ты получишь число 3  Ну ладно, подколол, подколол  Current[y] = rand() / ((RAND_MAX + 1) / 3). Ну и еще подумать об округлениях. Тогда ((RAND_MAX + 2) / 3). Цитата(-=Женек=- @ Jan 13 2008, 20:45)  делаю с ним (unsigned int), чтобы результат не был отрицательным. Далее делю на 10000 и беру результат Посмотрите внимательнее свой код - вы преобразуете к (unsigned int) результат после деления, а не до. Цитата(-=Женек=- @ Jan 13 2008, 21:02)  Кстати, MAX_RAND менял - не помогало. Библиотечный макрос называется RAND_MAX. ReAl вам пытался объяснить, что RAND_MAX менять не нужно - она задана вам "свыше" автором библиотеки. И как бы вы ее не меняли - код, скомпилированный в библиотеку об этом ничего не знает. Переопределяя RAND_MAX вы можете только сделать ваш код обработки (если он использует RAND_MAX) несовместимым с библиотечной функцией, ничего больше.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jan 13 2008, 20:29
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(ReAl @ Jan 13 2008, 21:55)  вполне влазит в unsigned int. Влазит, но тогда будет надо корректно явно производить операции с unsigned. Например, что будет напечатано: Код #define SOME 0x7FFFFFFF int z = SOME; printf( "Result1=%i\n", z/((SOME+1)/3) ); printf( "Result2=%u \n", z/((SOME+1)/3) ); printf( "Result3=%i\n", ((unsigned int)z)/((SOME+1)/3) ); Это я и имел ввиду,когда писал СергеюЦитата Не наступи!
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
Сообщений в этой теме
-=Женек=- Как функцией rand() получить число от 0 до 2 ? Jan 13 2008, 11:33 IgorKossak Функция int rand(void) возвращает целое число в ди... Jan 13 2008, 11:50 Petka Цитата(IgorKossak @ Jan 13 2008, 14:50) Ф... Jan 13 2008, 11:57 zltigo Цитата(IgorKossak @ Jan 13 2008, 13:50) П... Jan 13 2008, 11:59 ReAl Цитата(IgorKossak @ Jan 13 2008, 13:50) Ф... Jan 13 2008, 13:33  zltigo Цитата(ReAl @ Jan 13 2008, 15:33) А-а-а... Jan 13 2008, 13:59 -=Женек=- мне не нужна плавающа точка.
Ваш пример не работае... Jan 13 2008, 12:21 zltigo Цитата(-=Женек=- @ Jan 13 2008, 14... Jan 13 2008, 12:52 Rst7 ЦитатаТак просто не отделаетесь - Автор хотел диа... Jan 13 2008, 14:55 ReAl Да, конечно, while( r == 3), это я глюкнул - не ус... Jan 13 2008, 15:01 -=Женек=- Господа, ну конкретный результат кто-нибудь может ... Jan 13 2008, 15:43 Сергей Борщ Цитата(-=Женек=- @ Jan 13 2008, 17... Jan 13 2008, 16:21  zltigo Цитата(Сергей Борщ @ Jan 13 2008, 18:21) ... Jan 13 2008, 17:09 -=Женек=- брр... а RAND_MAX тогда чему равен? И к чему эти д... Jan 13 2008, 16:34 Kirill Trusov я конечно салага но 3 вопроса
1. для какого компи... Jan 13 2008, 16:41 -=Женек=- Цитатая конечно салага но 3 вопроса
1. для какого... Jan 13 2008, 17:35 zltigo Цитата(-=Женек=- @ Jan 13 2008, 19... Jan 13 2008, 17:47 -=Женек=- Знаете, за что я благодарен форуму?
Пока дождешься... Jan 13 2008, 18:26 zltigo Цитата(-=Женек=- @ Jan 13 2008, 20... Jan 13 2008, 18:36 -=Женек=- И что? ну пусть будет 31232, делим на 3, получаем ... Jan 13 2008, 19:02 Rst7 ЦитатаПРоделайте свой код с каждым из них в письме... Jan 13 2008, 19:04 Rst7 Другое дело, что деление сюда прикладывать как-то ... Jan 13 2008, 19:19 ReAl RE: Как функцией rand() получить число от 0 до 2 ? Jan 13 2008, 19:29 Rst7 ЦитатаВроде нигде не промахнулся...
Таки немного ... Jan 13 2008, 19:51 mdmitry Вопрос в дискуссию: кто-нибудь из авторов варианто... Jan 13 2008, 21:44 zltigo Цитата(mdmitry @ Jan 13 2008, 23:44) Там ... Jan 13 2008, 21:49 Kirill Trusov Цитата(mdmitry @ Jan 13 2008, 23:44) Вопр... Jan 15 2008, 19:52 Elegorod Кодint a = (new java.util.Random()... Jan 14 2008, 19:57
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|