螺旋を描いて…

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

RAND・関数の思い出・71…

「RAND」は、乱数を発生させる関数です。

 

乱数とは、でたらめな数のこと。

よくたとえられるのが、サイコロで、1~6のうち、どれかが順不同に、しかも何の関連性もなく、出ます。

 

こんなのもありますね。
f:id:kiha-gojusan-hyakusan:20230717170533j:image

 

「乱数サイ」と言います。

正二十面体なので、1~20までの数字が振ってあります。

どれが出るかわからないので、1~20までの乱数を発生させるとも言えますし、1の位に絞れば、0~9の乱数サイとも言えます。

 

乱数は通常の計算では、まず使われませんが、例えばゲームのように、毎回答が違わなければ困る場合があります。

そんな時に、この「乱数」が活躍するわけです。

 

乱数は、順不同の数値を表示しますが、実はコンピューター的には、難しい作業で。

全く根拠がない答を出すのは、コンピューターは苦手なんです。

 

なのでかつては、「リフレッシュレジスタ」というものを、乱数に使っていました。

かつて主流だった、DRAMDynamic Random Access Memory)は、実はそのまま放置すると、記憶が消えてしまう記憶媒体で。

ダイナミックは「躍動的」などと訳されますが、ここでは「Dynamic=動的」。

なので、一定期間内に「覚え直させる」処理が必要だったんです。

 

これを司っていたのが「リフレッシュレジスタ」で、どのタイミングで、どの部分をリフレッシュさせるかを、格納してありました。

この値は、全く順不同ではなく、厳密には系列があるんですが、値を見に行っても、その時によって、全く予測不能な数字が入っていますので、乱数の発生に利用されていたんです。

 

今は、「メルセンヌ・ツイスタ」という方式が使われているそうです。

メルセンヌ素数、2の累乗から1を引いた数の素数ですが、その24番目の「2の19937乗-1」の周期を使って、乱数を作成します。

実際には加工しますが、6000桁を超える、非常に長い数学的空間を使うので、乱数の使用に耐えうる、結果的には一様に分布する(偏りがない)乱数を作れるそうです。

 

実際にこの関数を呼び出すと、0~1までの、第9位までの小数が返されます。

これにかけ算して、INT関数で整数化することで、実用的な乱数にします。

例えば、10倍して整数化すれば、0~9の乱数が返りますし、0が気に入らなければ、さらに1を足せば、1~10の範囲になります。

 

まぁ、ビジネスユースではあまり使わない関数ですが、ちょっと遊び心を出した時に、この関数は結構役に立ちますよ。

 

 

次は「PHONETIC」です

kiha-gojusan-hyakusan.hatenablog.com

 

 

前は「IFNA」です

kiha-gojusan-hyakusan.hatenablog.com