乱数。
順不同な「でたらめの数」のことをいいます。
発生させるたびに、全然違う数になり、規則性は全くありません。
パソコンを、ビジネスから入った人は、最初に習う関数は、「Sum」とか「Average」とかでしょうね。
合計、平均を取る関数です。
でも、パソコンを趣味から入った人は、かなり早くに出会う関数ですね。
例えばゲームを作ろうとした場合、コンピュータが出す結果(サイコロの目、敵の動き)などは、多かれ少なかれ、予測不能なものでなければなりませんからね。
いつもおんなじ結果では、ゲームにならないわけです。
僕が乱数の関数に、初めて出会ったのは、小学5年生の頃。
「PB-100」という、ポケットコンピューターでした。
確か、「Hi-Loゲーム」というサンプルプログラムがあって、コンピューターが乱数で出した数字を当てる、というもの。
答が60で、50と答えたら「Lo」、70と答えたら「Hi」と表示され、だんだん答が絞られていき、当たれば大当たり!ってな感じでしたね。
もちろん、毎回違う答が、準備されましたよ。
関数は通常、0から1未満の小数で与えられるので、例えばサイコロのように、1~6の数字が欲しい時は、まず乱数を6倍し、0~5.999…にます。
でも、これだとゼロが出てしまいますから、1を足して整数化すると、1~6の乱数が出来上がります。
整数化する時も、四捨五入では確率が変わってしまうので、
切り捨て(通常はINTで整数化)でするのがポイント。
これだけでも、プログラムの要素やコツが、たくさんあるんですよ。
Excelの場合は、「Rand」という関数で、乱数を発生させます。
言語によっては、「Ran」だったり、「Rnd」だったりします。
まぁ、BASICやExcelだと、ちゃんと関数が用意されてるんですが、機械語レベルだと、そんなものはありません。
機械語を組んでた時、いろいろ勉強しましたが、僕が使っていた、「MSX」というパソコンでは、「リフレッシュレジスタ」というものを使って、乱数を発生させていました。
今でもそのようですが、パソコンの一時記憶装置である「RAM(Random Access Memory)」は、DRAM(Dynamic RAM)というものを使っており、実は定期的に内容を復習させないと、内容が消えてしまうんです。
そのため、次はどこのメモリーを復習させるかを、この「リフレッシュレジスタ」に入れて、記憶を保っていたんですが、メモリって順番に使うものじゃないため、この値は全くの順不同で、常に変動します。
それを、乱数発生に応用したわけですね。
パソコンなんて、今は使うだけの人がほとんどですが、何かプログラムを作ろうと思って、深く掘り下げると、それは深い世界が待っています。
仕事、趣味など、ジャンル、分野は多数ありますが、そのうちの一つだけでも、ディープに知識を得、使いこなせるようなジャンルを、持ちたいものですね。
次は「う」です
kiha-gojusan-hyakusan.hatenablog.com
前は「つ」です