Генерация случайного числа в промежутке
Обычный Randomize Timer тут не помогает, как я не пытался. Кто может помочь?
Randomize Timer
xy = int(rnd*y) + x
Ну, прежде я присваиваю значения текстовых полей для x и y, объявляю переменные и т.д. Это все ясно. Трудность в том, как более грамотно производить генерацию числа в промежутке от x до y. Вышеизложенный код, хоть и простейший грязный генератор, но он относительно справляется с задачей. Относительно, выдавая числа превышающие "y". И почти никогда не приближается к минимальному X. Почему так происходит, понятно. Как исправить - я не знаю.
Хм... ну в таком случае мы непременно выскакиваем за промежуток. Пример. Нам необходимо выбрать случайное число из диапозона 200 - 450. Если код работает по этой форме, то... может получится так:
xy = 'генерация случайного числа' (пускай будет)300 + 200 - 450 = 50.
Выходит, что при всех этих операциях, результат будет вылетать за промежуток. В примере выходит 50, в тот момент, как минимальное возможное значение должно быть >= 200. То есть >=X.
Конечно, можно сделать цикл, при котором задать условие на проверку xy и в случае, если оно вылетает из диапозона - повторить попытку генерации. Но даже при этом, числа в результатах будут мягко говоря похожи.
To produce random integers in a given range, use this formula:
Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
'ПЕРЕВОД
чтобы получить произвольное число в заданном диапазоне используйте эту формулу
Int((верхняя_граница - нижняя_граница + 1) * Rnd + нижняя_граница)
Dim MyValue As Long
Randomize
MyValue = Int((450 - 200 + 1) * Rnd + 200)
MsgBox MyValue
End Sub