乱数
と言うわけで、今回も、JavaScriptの話題。日々、勉強中です。
と言っても、別にJavaScriptに限定されません。
アルゴリズムの話です。
数十年前、ボクが小学生の頃、MSXパソコンでBAISC言語を使っているとき、乱数を発生させる必要がありました。
コンピュータは元々、乱数を作るのは苦手です。
何も根拠の無い状態から乱数を作るのは、たぶん、ほぼ不可能だと思います。
なので、何かを根拠として作るんでしょう。
例えば、現時点での西暦年数と時刻の秒数から生み出す、とすれば、刻々と変化するので、乱数が生まれます。
あるいは、スマートフォンのようなモバイル機器なら、現在地の緯度と経度を根拠にしても良いかと思います。
とにかく、何らかのベースがあって、それを根拠にして乱数(のような値)を生み出すのがコンピュータの乱数(擬似的な乱数)だと思います。
と言っても、ユーザーはそんな内部の仕組みは意識する必要はありません。
例えば、MSXのBASIC言語には、最初から、乱数を発生させる関数があります。
それが、
RND
です。
画面に文字を表示する命令が、
なので、
PRINT RND
と書くだけで、画面に乱数が表示されます。
この、RND命令は、0以上1未満の乱数を発生させます。
では、例えば、0から9までの整数の乱数が欲しい場合はどうすれば良いでしょうか。
MSX BASICには、
INT()
と言う関数があります。これは、小数点以下を切り捨てる関数です。
例えば、
INT(4.732)
なら、得られる値は4です。
ここまでで、答えは出ますね。
0から9までの整数の乱数を得る。
答えは、
INT(RND*10)
ですね。
RNDが0以上1未満の乱数を生み出すので、それを10倍すれば、0以上10未満の乱数が発生します。その小数点以下を切り捨てるわけです。
そうすれば、必ず、0から9までのいずれかの整数が得られますね。
先日から言っているように、プログラミングと言うのは、言語の文法を覚えるのが重要では無いんですよ。
むしろ、覚えた例文を使って、どうやって、やりたいことを実現するか。
指定範囲の乱数
上記の応用をしてみましょう。
例えば、5から10までの整数の乱数を得たい場合はどうするでしょうか。
答えを先に書くと、
INT(RND*6)+5
ですね。
RNDを6倍することで、0以上6未満の乱数が発生し、それをINTで小数点以下を切り捨てるので、0以上5以下の乱数になります。さらにそれに5を足すので、結果として、5以上10以下の整数の乱数になります。
こんな風に、言語の文法よりも、アルゴリズムを考える方が、プログラミングの醍醐味なんですね。
と言うわけで、JavaScriptに戻ります。
JavaScriptで乱数を得るのは、
Math.random()
です。これは上記のMSX BASICのRNDと同じで、0以上1未満の乱数を発生させます。
また、JavaScriptでは、小数点以下切り捨ては、
Math.floor()
です。
なので、5から10までの整数の乱数を得たい場合は、
Math.floor(Math.random() * 6 ) + 5
となります。
以上、今回もプログラミング初心者向け記事でした。
小学生の頃を思い出しました。
初心者のみなさん、いっしょにがんばりましょう。