2011-12-23 6 views

答えて

92

既存の機能を使用しないでください。Math.random()に電話するだけです。 、-1を0.5 <もしそうでない1:

var plusOrMinus = Math.random() < 0.5 ? -1 : 1; 
+4

作品完璧に、面白い私はどこでもオンライン答えを見つけることができませんでした。 –

+1

良い洗練されたソリューション、ありがとうございました –

9

ちょうどそれの楽しみのために:

var plusOrMinus = [-1,1][Math.random()*2|0]; 

または

var plusOrMinus = Math.random()*2|0 || -1; 

しかし、あなたは、保守になると思うものを使用します。

+1

一方で、私は可読性のために何か言いたいことがあります。一方、私の答えの3文字を削るための名誉念(私はすべての3文字が不要な空白であると主張することができますが)。あなたが '0.5'から' 0'を取り除くと、私は1文字短くなります。 :-) – ziesemer

+0

はい、楽しいです。 :-) – RobG

+0

これはコードです! – egidiocs

35

それだけでソートの理にかなっているように私はいつも

Math.round(Math.random()) * 2 - 1 

のファンしてきました。

  • Math.round(Math.random())はあなたに0または2

  • を与える2を乗じそして1を引いあなたに0または1

  • を与えることは、あなたに与え-1または1

直感的!

+0

@RobG - あなたは正しいです、先生 – majman

+0

私の意見では、これはより良い "ランダム" - または+作成者です。選択された答えは私のためには機能しません。なぜなら、4より小さい数値が負でない場合はどうしますか?これはまさにより優れたソリューションです。 – Brendan

3

これまでの回答が示すように、実際にはさまざまな方法があります。

恐らくMath.round(の最速という組み合わせ)とMath.random:

// random_sign = -1 + 2 x (0 or 1); 
random_sign = -1 + Math.round(Math.random()) * 2; 

あなたはまた、Math.cos()(which is also fast)を使用することができます。

// cos(0) = 1 
// cos(PI) = -1 
// random_sign = cos(PI x (0 or 1)); 
random_sign = Math.cos(Math.PI * Math.round(Math.random())); 
3

は、なぜあなたはしてみてくださいいけません:

(Math.random() - 0.5) * 2 

50%の確率で負の値になり、さらにランダムな数値生成されたバー。

た場合、または

は本当に-1/1必要があります。

Math.ceil((Math.random() - 0.5) * 2) < 1 ? -1 : 1; 
関連する問題