日記

UWSCで乱数を生成する方法

UWSCで乱数を生成する方法
作業効率化のためにUWSCを使っています。
先日、「普段やっている作業はUWSCで乱数を使えれば簡単になる」と気が付き、早速調べてみました。

解決策はとてもシンプルなもの。さらに、それを使った様々な実戦例がとても面白いのです。
調べたことと、しょうもない実験の結果をまとめてみました。

 

UWSCで乱数を生成するには?

RANDOM関数を使います。

RANDOM(Range)  // 0 <= X < Range の範囲にある乱数を返す

例えば、RANDOM(10)とすると、0~9までの整数が返されます。
1~10の乱数が欲しい場合は「+1」すればよいです。

RANDOM(10)+1  // 1~10の整数を返す

 

アルファベットでランダムな文字列を作るには?

UWSCでアルファベットの文字コードは、大文字の「A~Z」が「65~90」、小文字の「a~z」は「97~122」です。
ゆえに、その数値をRANDOM関数でを生成すればできます。
文字数の分だけループ処理すれば、例えばアルファベット100文字のランダムな文字列を作ることも可能です。

CHR(65 + RANDOM(26))  // 大文字のアルファベット1文字を返す
CHR(97 + RANDOM(26))  // 小文字のアルファベット1文字を返す

ちなみにKBD関数で出力したい場合は、直接文字コードを指定できます。

KBD(65 + RANDOM(26))  // 大文字のアルファベット1文字をキーボード出力する
KBD(97 + RANDOM(26))  // 小文字のアルファベット1文字をキーボード出力する

 

UWSCの乱数には偏りはないの?

ここからは個人的な興味の世界です。
「乱数」というと常につきまとうのが「偏り」について。
というわけで、実験してみました。
 

実験のデザイン

RANDOM(10)を1万回ループさせる。
それを10セット、計10万回行う。
「0~9」それぞれの出力数と、連続出力回数を数える。

 

実験の結果

それぞれの出力数

縦が試行回数、横が出た数字

0 1 2 3 4 5 6 7 8 9
~10000 977 963 1066 950 1012 1054 965 1001 1027 985
~20000 979 1015 947 991 954 1004 1034 1016 1051 1009
~30000 973 1012 967 1027 1039 963 998 1080 1021 920
~40000 1005 1037 961 1016 1019 1062 956 951 1023 970
~50000 965 994 992 990 1055 1003 980 1035 979 1007
~60000 995 1014 995 976 999 988 1013 1019 1017 984
~70000 955 982 987 1003 993 1034 1001 990 1025 1030
~80000 976 998 965 1004 1033 1003 1037 984 995 1005
~90000 989 994 961 1004 1035 984 1027 1009 1030 967
~100000 1046 1034 965 989 1022 1041 965 979 996 963
合計 9860 10043 9806 9950 10161 10136 9976 10064 10164 9840

連続出力回数

1回 2回 3回 4回 5回 6回
~10000 8978 921 89 9 2 0
~20000 8961 938 94 5 1 0
~30000 9031 874 87 6 1 0
~40000 9053 846 86 14 0 0
~50000 8949 926 107 16 1 0
~60000 9004 893 90 9 3 0
~70000 9001 897 90 10 1 0
~80000 8942 947 98 10 2 0
~90000 9004 896 92 7 0 0
~100000 9014 896 82 7 0 0
合計 89937 9034 915 93 11 0

 

考察

1万回あたりの出力回数の最大値は「1080」、最小値は「920」と、160回の差がある。10万回だと最大値は「10164」、最小値は「9806」で、その差は358回。
1万回で1%程度の誤差が生じ、回数が多くなるほどそれは少なくなっていく。
専門的な知識はないが、おそらく統計学的に有意差なしと言えるだろう。
連続出力回数にも同じことが言え、回数が多くなるにつれ理論値に近づいていくことがわかった。
素人レベルなら何も考えずに関数を使って良いと考える。

 

まとめ

UWSCで乱数を生成するにはRANDOM関数を使えば良いです。
ちなみに、2020年現在、作者様のサイトが更新されておらず、今後もUWSCが使い続けられるかは分かりません。
別の自動化する手段も模索しないといけませんね。

-日記
-, , , , ,