Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Генератор случайных чисел (http://www.flasher.ru/forum/showthread.php?t=145910)

Antony 22.10.2010 20:57

Генератор случайных чисел
 
Есть-ли какиенибудь способы или может классы отдельные для генерации случайных чисел?
Стандартная функция Math.random() неустраивает абсолютно. Пример: если генерить с помощью неё числа от 0 до 10, то шанс что выпадет 0 или 10 значительно ниже чем например 4,5,6.

udaaff 22.10.2010 21:00

http://www.flasher.ru/forum/showpost...2&postcount=26

deamoK 22.10.2010 21:13

стандартной функции хватает:
генератор целых чисел:
Код AS3:

private function randRange(minNum:int, maxNum:int):int
{
            return (int(Math.random() * (maxNum - minNum + 1)) + minNum);
}

для Number, думаю сами разберетесь))

а, мля, понял в чем проблема =\
да, походу етой функции не хватает

Antony 22.10.2010 21:49

спасибо, понял в чем тут загвоздка. Использовал такой способ Math.round(Math.random()*10). Сделал как там написано, применил floor вместо round. Ситуация изменилась, щас генерация происходит более равномерно.

P.S. Вот что ещё по теме нашёл:
http://flashgameblogs.ru/blog/actionscript/204.html

dimarik 22.10.2010 23:29

Анекдот.

Один мальчик все время писал слово "пошел" через "о" (пошол). Учительница его заставила остаться после уроков и написать это слово 50 раз, чтоб запомнить. Мальчик все сделал, как велела учительница. Уходя домой, он оставил ей записку:
"Я написал 50 раз слово 'пошел' и пошол домой".

Azrael 26.12.2015 20:15

Поясните пожалуйста новичку каким образом получается новое случайное число по коду со ссылки данной выше. Работа генератора мне понятна, не понятно почему обращение RND.Value дает новое число, вроде бы только константы и подготовленное число.
Код AS1/AS2:

public class RND {
        private var val:uint;
        static var maxValue:uint = 2147483647;
        private var k:uint = 1220703125;
        private var b:uint = 7;
        private var m:uint;
 
        public function RND(modul:uint = 2147483647) {
                this.m = modul;
                var t:Date = new Date();
                var s:String = t.time.toString();
                s = s.substr(s.length-3,3);
                this.val = uint(s);
        }
 
        public function get Value() {
                val = ((k * val + b) % maxValue);
                return val % m;
        }
}


i.o. 27.12.2015 02:54

меняется с каждым вызовом private var val:uint;

Azrael 27.12.2015 12:59

Цитата:

Сообщение от i.o. (Сообщение 1190246)
меняется с каждым вызовом private var val:uint;

Но "случайность" ведь в конструкторе, а не в геттере.

КорДум 27.12.2015 13:29

Код AS3:

val = ((k * val + b) % maxValue);

Каждый раз val разный в формуле, оттого и на выходе меняется.

Max_Payn 27.12.2015 15:59

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


Часовой пояс GMT +4, время: 00:33.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.