Global Information site~siruzou

コンピューターは万能に見えますが実はサイコロを振れません!

2014.06.26

コンピューターは万能に見えますが実はサイコロを振れません! はコメントを受け付けていません

一見、万能に思えるコンピューターは、実はあらかじめ教えられた計算しかできません。「サイコロ」を振ることができないのです。

しかし、世の中のコンピューターは、さまざまな場面で「サイコロ」を転がさなければなりません。

コンピューターゲームでは、対戦相手への攻撃が当たったかどうかなど、プレイヤーがとった行動の結果判定に必要です。

パチンコやパチスロでは、当たりはずれを判断するために必要ですが、お金が絡むため、より慎重でなければなりません。

スポンサーリンク

ネットショッピングなどで使われるクレジット決済でも、暗号の強度を保つために「サイコロ」を振る必要があるのです。

実際には、コンピューターが上記のように、サイコロを振っているかのような使われ方をしています。コンピューターは、どのようにしてサイコロを振っているのでしょうか?

そもそも、なぜコンピューターにサイコロを振らせる必要があるのか?

サイコロを振った結果の数を「乱数」と呼びます。サイコロを一度や二度振っただけでは、あなたが適当に選んで書き並べた数と、そう大きな違いはありません。

しかし、百回や二百回という回数でサイコロを振った場合、この「乱数」は適度にバラついてくれるのです。1から6の出目が「ほぼ均等」に、バラつきます。

完全な均等ではなく、「1の出目が4回連続」で出たりと、適度にかたよることもあるため、人の手では作り出すことができません。このような特徴をもつ乱数を、コンピュータで作り出す必要が出てきたのは、まさにコンピューターが発明された当時です。

No18-2-039画像02

第二次世界大戦中に、敵国が使っている暗号の解読や、ミサイルの弾道計算のため、コンピューターは開発されました。その中でも、ミサイルの弾道などの物理演算については、その計算に「ごく自然なぶれ」が、大量に必要でした。

乱数を生み出すアルゴリズムとは?

コンピューターは、与えられた計算を淡々とこなします。5ケタ×5ケタの計算を命じても、すぐに計算してくれます。しかし一方で、「1から6のうち好きな数を選べ」と命令しても、答えることはできません。

そのため、最初期には「サイコロを振った結果」をコンピューターに打ち込む、という方法が行われていました。しかし、一度や二度ならばともかく、何百何千とこんなことをやっていたのでは、日が暮れてしまうでしょう。

コンピューターは高速で計算する装置であるのに、それを活かせないという問題が発生していたのです。

それを解決するよう試みたのが、現代のコンピューターの父でもあるジョン・フォン・ノイマンです。現在あるコンピューターのほとんどは「ノイマン型コンピューター」と呼ばれています。

参考記事:ウィキペディア:ジョン・フォン・ノイマン

ノートパソコンの画像

ジョン・フォン・ノイマンは、コンピューターに擬似的にサイコロを振らせ、「乱数」を生み出す『擬似乱数生成アルゴリズム』を考えだしました。それ以降、コンピューターの発展とともに、より複雑な計算で、自然な乱数を作り出すことに成功しています。

スポンサーリンク

簡単な乱数のつくりかた

平方採中法

上記にあるジョン・フォン・ノイマンが1946年に考案した「平方採中法」とよばれる乱数生成のアルゴリズムであり、とても単純な計算で、乱数をつぎつぎに生み出します。

平方採中法の計算

ある数字を2乗し、その数列の「まん中」から拾った数字を、サイコロを振った結果として扱います。サイコロを振った結果を再び2乗すると、新しく次の乱数が得られます。

これを何度も繰り返していくと、いずれ最初の数字に戻り、ループします。これは「周期」とよばれ、可能なかぎり長いほうが、生成アルゴリズムとして優れていると言えます。

実は、この「平方採中法」は、周期はそう長くないため、今はほとんど使われることはありません。これより紹介する方法に取って代わられています。

線形合同法

あらかじめ、三つの数字A、B、Mを決めておきます。

ある数字にAを掛け、Bを足します。その計算結果をMで割ると、その余りがサイコロの結果となります。このサイコロの結果を、同じく計算すると、再びあらたな結果を作り出すことができます。

コンピューターのプログラム言語で「サイコロを振った結果を示せ」と命令した場合、その多くはこの方法で、瞬時にサイコロを振ってくれます。

ただ、この「線形合同法」には、多くの弱点が存在しています。しかしその弱点を克服する方法もよく研究されているため、総合的にみると、非常に使いやすい乱数と言えます。

以上、二つの乱数アルゴリズムは、単純で高速な計算ができるため、使いやすいものですが、実は古典的な方法に分類されています。

これら以外にも、より難解な計算で、自然な乱数を作ることができる「メルセンヌ・ツイスタ」などがあり、それぞれの用途にあわせた乱数が、さまざまな場面で使われています。

高度な乱数アルゴリズムは、特に「暗号化」の分野で使われ、インターネットでショッピングを行うときなどに重宝されています。

byヒビタカ

スポンサーリンク

Pocket
LINEで送る

関連記事

コメントは利用できません。

知る蔵のTwitter~フォーローをお願います

知る蔵グループ関連専門サイト