Другие языки программирования и технологии

Генератор случайных чисел с равномерным распределением

Собственно столкнулся с такой проблемой-нужно получить случайные величины,распределенные по равномерному закону с математическим ожиданием 1.5 часа и среднеквадратическим отклонением 0.5 часа.С теорвером не очень дружу,поэтому был бы очень благодарен если бы подсказали на доступном языке как это реализовать,или материальчиком каким-нибудь поделились)).На всякий случай--пишу на VC++.Заранее спасибо
Матожидание и среднеквадратическое отклонение присуще и равномерному распределению в том числе.
Матожидание Ех=М=(a+b)/2=((M-h)+(M+h))/2
Дисперсия Dx=(b-a)²/12=((M+h)-(M-h))²/12=h²/3
Ср. квадратическое отклонение σ = √Dx = h / √3
Отсюда h = σ * √3
У вас ср. кв. отклонение 0,5, отсюда h = 0,5 * 1,732 = 0,866
Мат. ожидание 1,5, значит
а = 1,5 - h = 1,5 - 0,866 = 0,634
b = 1,5 + h = 1,5 + 0,866 = 2,366
Ну, и смотрите - вам нужно генерировать случайные числа равномерно распределённые от 0,634 до 2,366.
Генерируете случайные числа функцией rand и приводите их к получившемуся диапазону.
x = a + (float)(rand()/RAND_MAX*(b-a)); как-то так.
Для инициализации генератора используйте функцию srand.

P.S. Посчитаете h, а и b точнее, я считала приближённо.
Игорь Худобин
Игорь Худобин
51 590
Лучший ответ
Не понял вопроса. На моем любимом Visual Basic есть ГСЧ под названием RND, она дает случайную величину с равномерным распределением в диапазоне от 0 до 1. Если хочешь получить, например, от 10 до 20, то так
R = (RND*10) + 10
А вот как задать случайное время - не знаю, может быть можно, а может быть и нет.
Если матожидание и среднеквадратичное отклонение - то это как-то больше напоминает нормальное, а не равномерное.
Нормальное можно так:

Можно так:

или

где гаммы - равномерно распределены на промежутке [0;1]

Потом надо умножить на отклонение и прибавить матожидание.
Вячеслав Zett
Вячеслав Zett
31 623