Просмотр полной версии : Случайное положительное/отрицательное число
Universe
18.04.2010, 22:06
Как сделать так чтобы случайно выпадало то положительное, то отрицательное число, но не ноль?
Math.floor(Math.random() * 100) - Math.floor(Math.random() * 100);
Universe
18.04.2010, 22:40
Нет, такой способ всеравно выдаёт ноль!
for (var i=0; i<10; i++){
trace( Math.floor(Math.random() * 100) - Math.floor(Math.random() * 100) )
}
-18
-32
-26
74
16
-85
86
8
26
-6
mikhailk
18.04.2010, 22:56
вар 1
private function nonZeroRandomNumber() {
var nonZeroNumber:int = 0;
while (nonZeroNumber==0) {
nonZeroNumber = -100 + 200 * Math.random();
}
return(nonZeroNumber)
}
вар 2
var sign:int = ( int( Math.random()*2 )-0.5 ) * 2; // -1 или 1
var absValue:int = 1 + int( Math.random() * 100 ); // 1..100
var nonZeroNumber:int = sign * absValue;
while(!(result=int((Math.random()-Math.random())*100)));//:)
Можно примерно так:
result=(Math.random()*99+1)*(Math.random()<.5?-1:1);
Зачем 2 раза рандом вызывать?
function r():int
{
var n:int = Math.random() * 200 - 100;
if (!n) return 42;
return n;
}
:)
зачем подыгрывать положительным числам и числу 42 вчастности?) (при 10 тыс. запусков 42 выпадает в среднем 150 раз, а остальные числа по 50 раз).
Лучше объединить:
function r():int{
var n:int = Math.random() * 200 - 100;
if (n) return n;
else return (Math.random()*99+1)*(Math.random()<.5?-1:1);
}
Можно и не два раза, но не в одну строчку.
n=Math.random()*199-100;
if(n>=0) n++;
mikhailk
19.04.2010, 15:23
имхо, красивее в одну строчку, без логических операторов:
var n:int = ( int( Math.random()*2 )-0.5 ) * ( 2 + int( Math.random() * 200 ) );
Кстати, те, кто считает, что снаряд дважды в одну воронку не падает, немного заблуждаются. Я как раз сегодня отлаживал рулетку у себя, так у меня число 16 в диапазоне 1..24 выпало 4 раза подряд :D
Или я не очень понял код, или в последнем варианте будут числа от 2 до 202 и -2 до -202, без -1, 0 и 1.
mikhailk
19.04.2010, 17:10
Первая часть дает либо 0.5, либо -0.5 (минус 0.5)
Вторая - целые в диапазоне от 2 до 200
Перемножение даст диапазоны -100..-1 и 1..100
Теперь понял. Почему-то при первом прочтении решил, что первая часть даёт -1 или 1.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.