非天マザー by B-CHAN

iPhoneの使い方、IT、金融、経済、不動産、保険、ビジネス、音楽、映画、ニュース、自己啓発などを語ります。

プログラミングでの乱数の考え方

乱数

 

 

と言うわけで、今回も、JavaScriptの話題。日々、勉強中です。

と言っても、別にJavaScriptに限定されません。

アルゴリズムの話です。

 

数十年前、ボクが小学生の頃、MSXパソコンでBAISC言語を使っているとき、乱数を発生させる必要がありました。

コンピュータは元々、乱数を作るのは苦手です。

何も根拠の無い状態から乱数を作るのは、たぶん、ほぼ不可能だと思います。

なので、何かを根拠として作るんでしょう。

例えば、現時点での西暦年数と時刻の秒数から生み出す、とすれば、刻々と変化するので、乱数が生まれます。

あるいは、スマートフォンのようなモバイル機器なら、現在地の緯度と経度を根拠にしても良いかと思います。

とにかく、何らかのベースがあって、それを根拠にして乱数(のような値)を生み出すのがコンピュータの乱数(擬似的な乱数)だと思います。

 

と言っても、ユーザーはそんな内部の仕組みは意識する必要はありません。

例えば、MSXのBASIC言語には、最初から、乱数を発生させる関数があります。

それが、

 

RND

 

です。

画面に文字を表示する命令が、

 

PRINT

 

なので、

 

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

 

となります。

 

以上、今回もプログラミング初心者向け記事でした。

小学生の頃を思い出しました。

初心者のみなさん、いっしょにがんばりましょう。