Форум: "Прочее";
Текущий архив: 2009.02.15;
Скачать: [xml.tar.bz2];
ВнизГенератор случайных чисел Найти похожие ветки
← →
ИванН (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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.006 c