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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.01.2012, 17:53   #11
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
У меня библиотека, поставляемая с gcc 4.6.1 для x64, но тоже верно и для других, более ранних версий, в том числе и для 32-битных.
А зачем Вам реализация?) Если очень интересно, можете скачать из интернета исходники glibc и посмотреть.
Что бы сравнить со своей собственной формулой)

Ааа..... вот у меня формула такая:

Код:
(SeedValue = SeedValue * 214013L + 2531011L ) >> 16)& 0x7fff);
А в вашей библиотеке вот такая:

Код:
val = ((state[0] * 1103515245) + 12345) & 0x7fffffff;

Надо бы мне как нить по-эскперементировать) Я тоже хочу, что бы мой маленький рандом умел держать диапазон MAX_INT
_Bers вне форума Ответить с цитированием
Старый 02.01.2012, 18:01   #12
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

А возможно ли установить скажем шанс, который определял бы прохождение случайных чисел по границе диапазона, максимального его значения ?
L6go1as вне форума Ответить с цитированием
Старый 02.01.2012, 18:11   #13
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Код:
int StarterRand(){  srand(NULL);   return 0; }
int random(int least, int greatest)
{
    static int seed( StarterRand() ); //посльку переменная статическая, то время её жизни - время жизни всего приложения. 
                                      //Это гарантирует, что функция StarterRand() будет запущена лишь один раз.
                                      //StarterRand() Проинициализирует рандом.
                                  
                                      //Это избавляет программиста от необходимости помнить о ручной инициализации рандома

    return rand() % (greatest - least) + least;
}

...

random(0, 10);
random(-10, 10);
Цитата:
Сообщение от L6go1as Посмотреть сообщение
А возможно ли установить скажем шанс, который определял бы прохождение случайных чисел по границе диапазона, максимального его значения ?
Не понял этой фразы

Последний раз редактировалось _Bers; 02.01.2012 в 18:20.
_Bers вне форума Ответить с цитированием
Старый 02.01.2012, 18:11   #14
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

делетеделетеделетеделете
_Bers вне форума Ответить с цитированием
Старый 02.01.2012, 18:19   #15
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
Не понял этой фразы
Теперь получив нормально работающий рандом, можно ли задать вероятность ?

Например диапазон от 1 до 100, как задать скажем вероятность прохождения максимально близких чисел к 100 ?
Т.е. строка нормальная:
41 - 12 - 52 - 53 -76 - 98 - 64 и т.д., но после указания вероятности, например 50% что числа будут максимально приближены к 100, строка будет иметь вид:
52 - 23 - 98 - 34 - 96 - 85 - 12 - 91 и т.д.

Т.е. вероятность появления случайных чисел, которые максимально близки к 100, увеличится.
L6go1as вне форума Ответить с цитированием
Старый 02.01.2012, 18:22   #16
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от L6go1as Посмотреть сообщение
Теперь получив нормально работающий рандом, можно ли задать вероятность ?

Например диапазон от 1 до 100, как задать скажем вероятность прохождения максимально близких чисел к 100 ?
Т.е. строка нормальная:
41 - 12 - 52 - 53 -76 - 98 - 64 и т.д., но после указания вероятности, например 50% что числа будут максимально приближены к 100, строка будет иметь вид:
52 - 23 - 98 - 34 - 96 - 85 - 12 - 91 и т.д.
У стандартного рандома равномерное покрытие случайности по всему диапазону. Это значит, что вероятность выпадения цыферки "100" такая же, как и вероятность выпадения циферки "50", и такая же, как вероятность выпадения цыферки "ноль"
_Bers вне форума Ответить с цитированием
Старый 02.01.2012, 18:27   #17
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

А есть ли рандом в котором можно было бы задать вероятности выпадения чисел наиболее близких к макс\мин значению диапазона ?
L6go1as вне форума Ответить с цитированием
Старый 02.01.2012, 18:39   #18
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от L6go1as Посмотреть сообщение
А есть ли рандом в котором можно было бы задать вероятности выпадения чисел наиболее близких к макс\мин значению диапазона ?
Говорят, в boost есть все! Но сам я не проверял)

А так вообще.. предположим, что рандом выбрасывает числа из диапазона от нуля до 100.

Предположим, наш стрелок стреляет с вероятностью попадания в цель 80%

Это значит, что если выпадет больше 80 - промах.
Если выпадет меньше или равно 80 - попадание.

Все. что нам остаётся, это узнать - попал стрелок, или нет.


Код:
int RandEvent(unsigned int probability) //probability - вероятность события.
{  
    int randVal= random(0, 100); //получим случайное число от нуля до ста
    return randVal<=probability;
}
Функция получает на входе вероятность события, и возвращает 1, если событие произошло. Или нолик - если не произошло.
Функция использует генератор случайных чисел, описанный в этой же теме выше)

/ps если же тебе нужно, что бы генератор сам по себе генерировал числа не равномерно, а отдельные цыферки начали выпадать чаще - тогда нужно менять формулу самого генератора: Кнут, 2й том в помощь (и да спаси тебя боже, гуманитарий).

Последний раз редактировалось _Bers; 02.01.2012 в 19:12.
_Bers вне форума Ответить с цитированием
Старый 02.01.2012, 19:01   #19
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

До программирования игр еще не дорос, но идею уловил. Однако интересует именно вероятность получение тех или иных цифр.

Задался вопросом вчера, когда меня дрюкнули в Монополию, посчитав себя анлакером, задался вопросом: "а какие были бы значения кубика, с повышенной вероятности скажем выпадения 5 или 6" ... и вот всю ночь не спал, думал

Но спасибо за направление, будем искать решения ...

Случаем "генератор случайных чисел с заданным распределением" - не оно?
L6go1as вне форума Ответить с цитированием
Старый 02.01.2012, 19:02   #20
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

есть в бусте
http://www.boost.org/doc/libs/1_48_0...st_random.html
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Sleep(1000); srand(time(0)) masashama Общие вопросы C/C++ 10 19.04.2011 16:58
srand Dario Общие вопросы C/C++ 2 16.04.2011 22:39
Srand()-> delphi dosha Общие вопросы C/C++ 3 08.01.2011 14:21
функция srand() Bob Dylan Visual C++ 4 18.08.2010 22:10
Как написать в коде чтобы диапазон А копировался как значение в диапазон В. Dorvir Microsoft Office Excel 12 23.05.2008 22:11