「RAND」は、乱数を発生させる関数です。
乱数とは、でたらめな数のこと。
よくたとえられるのが、サイコロで、1~6のうち、どれかが順不同に、しかも何の関連性もなく、出ます。
こんなのもありますね。
「乱数サイ」と言います。
正二十面体なので、1~20までの数字が振ってあります。
どれが出るかわからないので、1~20までの乱数を発生させるとも言えますし、1の位に絞れば、0~9の乱数サイとも言えます。
乱数は通常の計算では、まず使われませんが、例えばゲームのように、毎回答が違わなければ困る場合があります。
そんな時に、この「乱数」が活躍するわけです。
乱数は、順不同の数値を表示しますが、実はコンピューター的には、難しい作業で。
全く根拠がない答を出すのは、コンピューターは苦手なんです。
なのでかつては、「リフレッシュレジスタ」というものを、乱数に使っていました。
かつて主流だった、DRAM(Dynamic 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