螺旋を描いて…

螺旋 のごとく続く毎日を綴ります

「乱数」・しりとりの思い出・43…

乱数。

順不同な「でたらめの数」のことをいいます。

発生させるたびに、全然違う数になり、規則性は全くありません。

 

パソコンを、ビジネスから入った人は、最初に習う関数は、「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

 

前は「つ」です

kiha-gojusan-hyakusan.hatenablog.com