Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.02.15;
Скачать: CL | DM;

Вниз

Генератор случайных чисел   Найти похожие ветки 

 
ИванН   (2008-12-16 18:23) [0]

У меня есть генератор случайных чисел, который на выходе дает не целый результат в диапазоне от 0 до 1 (0 и 1 включительно), например: 0,73

Мне нужно из результатов работы этого генератора сделать равновероятностный генератор от 1 до 6 (1 и 6 включительно). Пробовал так: x = Округл(Rand * 5) + 1
Но в таком случае он не равновероятностный.

Подскажите пожалуйста.


 
TUser ©   (2008-12-16 18:26) [1]


> Но в таком случае он не равновероятностный.
>

как проверял?


 
Правильный$Вася   (2008-12-16 18:31) [2]

(X - Xmin)/(Xmax - Xmin)
обычное нормирование


 
anonims   (2008-12-17 09:46) [3]

округл(rnd*5)
длина диапазона попадания в 3 (2.5 - 3.5) =1
диапазон попадания в 0 (0 - 0.5) =0.5

округл(rnd *6 +0.5)


 
Сергей М. ©   (2008-12-17 10:04) [4]


> ИванН


Округление и линейное масштабирование не изменяет вероятностные характеристики результирующей последовательности.


 
wal ©   (2008-12-17 10:20) [5]


> Сергей М. ©   (17.12.08 10:04) [4]

Смотря что и как округлять


 
Jeer ©   (2008-12-17 10:28) [6]

Вот именно..
Округление нелинейная операция, к тому же есть разные методики округления.
А переход от одного целочисленного базиса RNG к другому - вообще нетривиальная задача.


 
Interior   (2008-12-17 10:30) [7]

Округл(RND*5)+1   И ВсЕ

5   - потому что диапазон равен 6-1 (от 1 до 6)
+1 - потому что нижний предел 1 (от 1)
Округление по вкусу - смотря какой результат надо, целый или дробный


 
Interior   (2008-12-17 10:32) [8]

И никаких нетривиальных задач.


 
wal ©   (2008-12-17 10:35) [9]


> Interior   (17.12.08 10:32) [8]

О тебя округление вверх, вниз или к ближайшему целому?


 
Сергей М. ©   (2008-12-17 10:36) [10]


> есть разные методики округления


Предполагается, что ОКРУГЛ использует математическую либо банковскую методику, что на диапазоне [1..6] вряд ли вносит существенные искажения в  распределение..


 
Дуб ©   (2008-12-17 10:42) [11]

>Interior   (17.12.08 10:32) [8]
> Сергей М. ©   (17.12.08 10:36) [10]

Все предельно ясно разжевано в

> anonims   (17.12.08 09:46) [3]

зачем тут спорить?


 
Jeer ©   (2008-12-17 10:46) [12]


>
> О тебя округление вверх, вниз или к ближайшему целому?
>


Для систем с целочисленным основанием ( двоичная, например) даже такого уточнения недостаточно, поскольку принципиально вносится систематическая погрешность. Чтобы ее свести к минимуму в асимптотике, надо менять случайным образом правило округления.


> Interior   (17.12.08 10:32) [8]
>
> И никаких нетривиальных задач.


Ну попробуй перейти от целичисленных диапазонов от 1..10 к  1..1000 с сохранением вероятностных свойств распределения.
Конечно, это другая задача - но уточнил, что не так все просто в этом мире :)


 
Jeer ©   (2008-12-17 10:53) [13]


> Дуб ©   (17.12.08 10:42) [11]
>
> >Interior   (17.12.08 10:32) [8]
> > Сергей М. ©   (17.12.08 10:36) [10]
>
> Все предельно ясно разжевано в
>
> > anonims   (17.12.08 09:46) [3]
>
> зачем тут спорить?


Для операций сложения и вычитания в двоичной системе сч. имеет место ненулевое мат.ожидание операционных ошибок.
Я всего лишь об этом :)


 
Дуб ©   (2008-12-17 10:57) [14]


> Jeer ©   (17.12.08 10:53) [13]

А я к тебе без претензий. :)


 
Сергей М. ©   (2008-12-17 11:06) [15]

В общем да, я был неправ.

procedure TForm1.Button3Click(Sender: TObject);
const
 m = 6;
var
 x, i: Integer;
 arr: array[1..m] of Integer;
begin
 SetRoundMode(rmTruncate); //для сохранения оригинального распределения
 for i := 1 to 10000000 do begin
   x := Round(Random * (m)) + 1;
   Inc(arr[x], 1);
 end;
 for i := 1 to m do
   Chart.Series[0].AddXY(i, arr[i]);
end;


 
Jeer ©   (2008-12-17 12:35) [16]

Почти завершая, казалось бы, простую тему, приведу ссылку на статью в которой более-менее адекватно автор постарался ответить на многие вопросы, возникающие при работе с float данными и округлениями.

http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1217

А тут методика тестрирования
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1218



Страницы: 1 вся ветка

Текущий архив: 2009.02.15;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.018 c
2-1231149365
Iriss
2009-01-05 12:56
2009.02.15
не отображается в трее


6-1198832452
LeoGig
2007-12-28 12:00
2009.02.15
Запрос скрипту CGI


15-1229625640
axis_of_evil
2008-12-18 21:40
2009.02.15
помогите правильно прочитать help


3-1214894716
i
2008-07-01 10:45
2009.02.15
асинхронное выполнение ADOStoredProc


3-1215246566
lod
2008-07-05 12:29
2009.02.15
Ошибка при выполнении метода post