PDA

Просмотр полной версии : Случайное положительное/отрицательное число


Universe
18.04.2010, 22:06
Как сделать так чтобы случайно выпадало то положительное, то отрицательное число, но не ноль?

Zik.
18.04.2010, 22:18
Math.floor(Math.random() * 100) - Math.floor(Math.random() * 100);

Universe
18.04.2010, 22:40
Нет, такой способ всеравно выдаёт ноль!

Diestro
18.04.2010, 22:48
Math.random() - 0.5

sltt
18.04.2010, 22:50
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;

Xero201
19.04.2010, 00:36
while(!(result=int((Math.random()-Math.random())*100)));//:)

VVall
19.04.2010, 02:47
Можно примерно так:

result=(Math.random()*99+1)*(Math.random()<.5?-1:1);

wvxvw
19.04.2010, 03:18
Зачем 2 раза рандом вызывать?
function r():int
{
var n:int = Math.random() * 200 - 100;
if (!n) return 42;
return n;
}
:)

Xero201
19.04.2010, 10:52
зачем подыгрывать положительным числам и числу 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);
}

VVall
19.04.2010, 12:03
Можно и не два раза, но не в одну строчку.

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

VVall
19.04.2010, 16:35
Или я не очень понял код, или в последнем варианте будут числа от 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

VVall
19.04.2010, 17:31
Теперь понял. Почему-то при первом прочтении решил, что первая часть даёт -1 или 1.