プロが教えるわが家の防犯対策術!

すみませんが教えて下さい。


参考書より
「-10~10までの範囲の整数値」であれば、小数部分を切り捨てるMath.floor()メゾットを使って「Math.floor(Math.random()*21)-10」となります。
Marh.random()が0だと「Math.floor(Math.random()*21)」の部分は「Math.floor(0*21)」となり0になります。
つまり「Math.floor(Math.random()*21)-10」の最小値は-10になります。
Math.random()が約1だと「Math.floor(Math.random()*21)」の部分はMath.floor(1*21)となり、約21(20.99999999・・)の少数部分を切り捨てて20になります。したがって「Math.floor(Math.random()*21)-10」の最大値が10になることが分かります。

とありますが、いろいろ調べても概念がさっぱりわかりません。

詳しい方、噛み砕いて教えて頂けるととてもありがたいです。

こんな質問ですみません。よろしければよろしくお願い致します。

A 回答 (1件)

Math.random()は 0≦n<1(1にはならない)を満たすnを返す関数であるというのは大丈夫でしょうか?



そこに21を掛けると、
0≦n<21

Math.floor()は小数部を切り捨てるので0≦n≦20.99999999999・・・と考えると
n=0,1,2,・・・,19,20

そこから-10なので
n=-10,-9,-8,・・・,9,10
となり、
-10≦n≦10(n:整数)
の範囲のnをランダムで生成することができます。


一般的に乱数に範囲を付ける場合は最大値MAX、最小値MINとすると、
Math.floor(Math.random()*(MAX-MIN+1))-MIN
と表されるようです。

実際にゲーム製作なんかしてると特にそんな処理をすることはほとんど無く
(Math.random()*(範囲))>>0    >>0:0ビットシフトで少数未満切り捨て(正の数限定、処理高速)
と0からの乱数を得たほうが便利なことのほうが多いです。
    • good
    • 0
この回答へのお礼

とてもわかり安かったです。

ありがとうございました。

お礼日時:2009/04/09 06:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!