2012-04-02 3 views
0

У меня есть следующий код для генерации двух случайных чиселслучайных чисел с JavaScript

var attackRoll = Math.floor((Math.random()*6)+1); 
var defenceRoll = Math.floor((Math.random()*6)+1); 

Когда я запускаю этот код, он будет генерировать два случайных числа, как и ожидалось. Единственное, что я замечаю, я хочу просто попросить, чтобы я не сходил с ума ... Первая переменная всегда будет иметь более высокий «Roll» или «Equal». Я запустил этот код для вывода значений так много, много раз и не один раз имеет второе значение было выше, чем у первого.

является ли это только мне глупо? или я назначил случайных чисел неправильно?

+0

Ради здравомыслия в, вы пробовали заменяя строки так, чтобы 'defenceRoll' запускался первым? – Matthematics

+0

2-я была выше для меня во второй попытке. Нет причин, чтобы это не было случайным. –

+0

Да, я сделал это, прежде чем публиковать вопрос, чередуя его, означает, что переменная, у которой никогда не было более высокого количества, теперь имеет большее число, а старая «выигрывающая» переменная будет только в лучшем случае рисовать с новой более высокой переменной –

ответ

2

ли вы имеете в виду, что attackRoll всегда больше или равно, чем defenceRoll? Совершенно не. на самом деле вероятность одного существ выше, чем другой 50% равных.

Можете ли вы поддержать свои претензии с помощью fiddle? Вы пробовали в другом браузере?

+2

Это не 50%, если вы считаете, что оба равны. Я соглашаюсь иначе. –

+0

@JamesMontagne: теоретически говоря, вероятность равенства двух непрерывных случайных величин равна 0 (1 значение по сравнению с бесконечным числом). Но так как 'float' действительно дискретный ... Исправляя свой ответ, спасибо :-). –

+0

Подождите, вы говорите, если вы производите два числа в случайном порядке, вероятность того, что они будут равными, приближается 0? Эти числа ограничены (очень низкая граница). Я неправильно понял? –

1

Это, как представляется однопользовательская ошибка - посмотрите на эту jsFiddle, и вы должны найти, что второе число будет разнообразно: же,
выше,
или ниже
чем первый номер.

0

Я не уверен, что вы хотите. Для того, чтобы получить один бросок костей, а другой, который выше или равно использование этого:

var sides = 6; 
var firstRoll = Math.floor((Math.random()*sides)+1); 
var secondRoll = Math.floor((Math.random()*(sides+1-firstRoll)+firstRoll); // a lucky one :) 

Если вы хотите рулонах и имеют более высокое место в первой переменной, используйте

var sides = 6; 
var firstRoll = Math.floor((Math.random()*sides)+1); 
var secondRoll = Math.floor((Math.random()*sides)+1); 
if (firstRoll >= secondRoll) { 
    higherRoll = firstRoll; // attackRoll 
    lesserRoll = secondRoll; // defenceRoll 
} else { 
    higherRoll = secondRoll; // attackRoll 
    lesserRoll = firstRoll; // defenceRoll 
} 
+0

Нет, дело не в этом, я не думаю. ОП думает, что его случайные числа не случайны. – Pointy

+0

А, ОК. Я не верил, что он действительно хотел бы спросить об этом. – Bergi

Смежные вопросы