Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> rand_int() - генератор целых случайных чисел... ... заданного промежутка. 
:(
    Опции темы
Alx
Дата 18.3.2006, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

Репутация: нет
Всего: 78



привет. эта функция нужна для получения целых случайных чисел из заданного промежутка.

раньше я пользовался Math.round(Math.random()*max) но оказалось, что в таком случае max и 0 возвращаются в 2 раза реже, чем остальные числа, т.к. перед округлением они могли принадлежать промежуткам только от 0 до 0.5 и от max-0.5 до max. то есть по 1/2.
в то время, как остальные числа имели в два раза большую вероятность, ведь они были на промежутке от n-0,5 до n+0.5 (n.5).

за основу я взял функцию из раздела VB, т.к. она удобна тем, что в ней можно задавать не только max-параметр, но и min.
функцию я назвал rand_int() и обращаться к ней можно 3 способами.
1) без передачи параметров - возвращается Math.random();
2) c передачей двух параметров - min и max
3) с передачей одного параметра - max.

третий способ особенно удобен, когда нужно выбрать случайный элемент из массива.

вот сама функция:

Код

function rand_int(mn,mx)
{   var rnd = Math.random();
    var min = (mx ? (mn || 0) : 0);
    var max = mx || (mn ? mn : 0);
    if (max == 0) return rnd;
    var rrand = (rnd * (max - min + 1)) % (max - min + 1) + min;
    return Math.round((rrand < max+0.5) ? rrand : rrand - max + min - 0.5);
}

var r1 = rand_int(); // возвращает рузельтат Math.random() ( дробное число от 0 до 1 );
var r2 = rand_int(100,999); // целое случайное число от 100 до 999
var r3 = rand_int(9); // целое случайное число от 0 до 9

alert([r1,r2,r3]);


вот какие результаты были после 4 запусков rand_int(10):

Цитата

0 => 78, 101, 97, 86
1 => 88, 84, 67, 101
2 => 96, 99, 111, 103
3 => 86, 84, 101, 85
4 => 90, 101, 91, 103
5 => 102, 94, 98, 84
6 => 92, 72, 90, 89
7 => 102, 102, 101, 91
8 => 91, 85, 82, 64
9 => 87, 89, 82, 95
10 => 88, 89, 80, 99


то есть, как видите, все варианты примерно равны.

надеюсь, функция Вам пригодится. )

Удачи! smile

Это сообщение отредактировал(а) Alx - 18.3.2006, 11:54


--------------------
PM MAIL WWW ICQ   Вверх
Ciber SLasH
Дата 19.3.2006, 01:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: 2
Всего: 67



Я всегда пользовался функцией:
Код

function Rand(n, m) {
  return Math.round(Math.random() * (m-n)) + n;
}

вроде всё нормально...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Здесь публикуют скрипты, которые уже проверены в обсуждениях других тем (при этом полезно поставить ссылки на все смежные обсуждения) или переносятся кем-либо из модераторов по просьбе участников, если видно, что в результате обсуждения темы был написан полезный или интересный скрипт. Третий возможный вариант - участник форума публикует скрипт, заведомо известный как полезный и эффективный, для, возможно, небольшой доработки и обсуждения.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Наши скрипты | Следующая тема »


 




[ Время генерации скрипта: 0.0384 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.