![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Очень интересно
![]() То есть в avm2 вызов Math.random() будет один - но как то нелогично, что берет из правой части, наверное, логичней было бы брать с левой? 2udafff: точно, голова кипит ![]()
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Ну, это мое предположение, что переписали, а не факт.
![]() Просто проверить легко, вместо рнд впихнуть в массив вызов функции, где рнд и будет формироваться, потом в трейс и на выход в return. В avm1 два трейса, в avm2 - один. |
|
|||||
|
Modus ponens
|
Цитата:
Посмотри на дамп: - вызов Math.random() во втором случае только 1 раз. - даже если бы он вызывался 2 раза - какая разница какой из элементов массива инкрементить? Судя по всему почему-то, в какой-то ситуации значение из стека не присваевается обратно элементу в массиве. EDIT: Ой, сорри - был не прав, проморгал, действительно Math.random() вызывается 2 раза... Чет я проглядел
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 09.03.2010 в 15:05. |
|
|||||
|
А кто может на примере объяснить почему Math.floor()
Math.floor() Доступность Flash Player 5. Во Flash Player 4 методы и свойства класса Math эмулируются при помощи приближенных вычислений и могут быть не так точны, как во Flash Player 5 и более поздних. Синтаксис Math.floor(x:Number) : Number Параметры x Число или выражение Возвращает Округленное в меньшую сторону число x. Описание Метод; находит ближайшее к и одновременно меньшее числа x число и возвращает его. Пример Данный код вернет значение 12: Math.floor(12.5); Данный код вернет значение -7: Math.floor(-6.5); Math.round() Доступность Flash Player 5. Во Flash Player 4 методы и свойства класса Math эмулируются при помощи приближенных вычислений и могут быть не так точны, как во Flash Player 5 и более поздних. Синтаксис Math.round(x:Number) : Number Параметры x A number. Возвращает Целое число. Описание Метод; округляет значение x по правилам математики. Если x одинаково близок к двум целым числам (то есть, оканчивается .5), округление происходит в большую сторону. Пример В следующем примере возвращается случайное число в указанном диапазоне. function randRange(min:Number, max:Number):Number { var randomNum:Number = Math.round(Math.random()*(max-min))+min; return randomNum; } for (var i = 0; i<25; i++) { trace(randRange(4, 11)); } Цитата:
__________________
Играй. Это жизнь. Всё повторяется. Играй. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
AzagThoth, если вы пишете аналог random() с использованием Math.random(), то вам нужно знать, что random() возвращает целое число от 0 до N, не включая N.
|
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Эти два варианта
дают на выходе разный диапазон чисел, floor 0..4, а round 0..5. Поэтому, когда вы генерите числа для доступа к массиву с длиной 5 (0,1,2,3,4), floor укладывается в этот диапазон, а round дает на единицу больше. Ежели использовать для round множитель не длины, а номер индекса, то вас ждет разочарование - равномерного распределения не будет. Пример var a:Array = [0, 0, 0, 0, 0]; var b:Array = [0, 0, 0, 0, 0]; for (var i:int = 0; i < 1000000; i++) { var m:int = Math.floor(Math.random()*5); var n:int = Math.round(Math.random()*4); a[m]++ b[n]++ } trace (a) trace (b) Цитата:
А с round распределения идут в таком соотношение: 1/8, 1/4, 1/4, 1/4, 1/8. Почему? Да потому, что целое число X (0<X<4) будет получаться от не целых чисел X-0,5..X+0,5 (диапазон равен 1), а числа 0 и 4, от 0..0,5 и 3,5..4 (диапазон равен 0,5), поэтому вероятность для чисел 1,2,3 будет в два раза больше, чем для 0 и 4. Последний раз редактировалось iNils; 09.03.2010 в 18:17. |
![]() |
![]() |
Часовой пояс GMT +4, время: 09:36. |
|
|
« Предыдущая тема | Следующая тема » |
|
|