Последние записи
- Преобразовать массив байт в вещественное число (single)
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
4th
Апр
Программа для тренировки быстрого подсчета шансов в покере
Posted by admin under c/c++
SeventhKey:
Пишу программу для тренировки быстрого подсчета шансов в покере.
Для этого мне нужен генератор случайных чисел, но… «случайные числа» от 6 до 13 должны выпадать чаще, чем 14..17 и 3..6 и уж тем более чаще, чем 17..22 и 1..2. Как это можно реализовать?
Vago:
А внутри каждого из этих интервалов ([6,13],[14,17],[3,5],[1,2],[18,22])? Вероятность одинаковая? Я в покер не играю, потому и спрашиваю.
Сtrl:
Просто это делается, на самом деле.
if (rand()%2 == 0)
{
... /* Вероятность 50%*/
}
Код:
if ((rand()%2 == 0) && (rand()%2 == 0))
{
... /* Вероятность 25%*/
}
И так далее.
Vago:
После того как 30 с лишним лет назад Форсайт, Малькольм и Моулер выставили на посмешище авторов культовой, как сейчас бы сказали, IBM-овской RANDU(), я очень осторожно отношусь к слову «просто» в применении к датчикам случайных чисел Я, для повышения эрудиции, хотел бы понять сначала — откуда в условии взялось «22»?..
kaljan775:
ну, смотрите, rand%2 вернет либо 1, либо 0, следовательно, следующий ранд так же вернет либо 1, либо 0, перемножаем вероятности — получаем 25%, или 1/2 * 1/2 = 1/4 = 0.25
Vago:
aljan775, если это Ваше объяснение — для меня, то спасибо, конечно! То, что вероятность выпадения двух «орлов» после двух подбрасываний монеты равна 1/4, я знаю Но только датчик случайных чисел возвращает не вероятность! На его выходе обычно — [псевдо]случайная величина, лучше или хуже подчиняющаяся тому или иному закону распределения. Так я хотел бы понять для начала, какой закон распределения нужен ТС (который куда-то исчез, кстати)?
Продолженение обсуждения на форуме
Последни ответ в теме о создании покер бота для интернет казино:
10.04.2011, Vago:
Сообщение от Сtrl
Поставленную задачу я решил. Делать код гибким — более долгая и трудоемкая задача.Не, ну можно, конечно, написать узкоспециализированный калькулятор для сложения 2 и 2, а за версию, складывающую 3 и 3, — требовать с заказчика отдельную оплату… Хочу себе такого доверчивого заказчика!
…
Ладно… Наблюдение за детишками в песочнице — хорошо в меру…
#include
#include
#include
#define PI 3.14159265358979323846
#define N_RESULTS 6
int GetRand2( int n, double* freq ) {
int k = 0;
double F = freq[0] ,
r = rand() / double( RAND_MAX ) ;
while ( r > F ) {
if ( ++k == n )
return k ;
F += freq[k] ;
}
return k+1 ;
}
int main() {
double f[N_RESULTS] ,
freq0[N_RESULTS] = { 0.13, 0.17, 0.28, 0.22, 0.12, 0.08 } ;
int k,
nSeeds ;
printf( "Number of seeds ? " ); scanf( "%d", &nSeeds ) ;
srand(time(0)) ;
printf("rand nums' frequencies for %d seeds:\n", nSeeds ) ;
for ( k = 0; k < N_RESULTS; k++ ) f[k] = 0. ; for (int i = 0; i < nSeeds; i++) { k = GetRand2( N_RESULTS, freq0 ) ; f[k-1] += 1. / double( nSeeds ) ; } for ( k = 0; k < N_RESULTS; k++ ) printf( "%1d - %.3f\n", k+1, f[k] ) ; getchar(); return 0 ; } [/code]
Уважаемый EC.cpp, меня сперва почему-то потянуло подбирать параметры генератора нормального распределения, а там, всё, что у меня есть, в конце концов опирается на неувядающие "Численные рецепты" Пресса и компании. Ну, вот это, например:
http://www.dreamincode.net/code/snippet1446.htmНо потом я подумал, что решить задачу с дискретным набором вероятностей, действительно, можно проще. Решение - см. выше.
Ни там, ни там, как Вы видите, списки не используются. Если Вам хочется пропустить 99 вызовов rand() - крошечный цикл вставляется, как Вы понимаете, элементарно. Правда, есть ли гарантия, что корреляция между вызовами rand() с шагом в 100 окажется меньше, чем между двумя вызовами подряд?..
...
Всем спасибо за беседу. Удачи в профессиональной карьере!
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)