5.1. A Trivial Mixing Function (単純な混合関数)
5.1. A Trivial Mixing Function (単純な混合関数)
説明目的で, 排他的論理和 (XOR) 関数を使用した単一ビット入力の些細な例を説明します。この関数は, 以下の表に示すように, キャリーなしの加算と同等です。これは, 1 つの出力ビットが常に入力ビットのいずれかの変化に対して変化する退化したケースです。しかし, その単純さにもかかわらず, それは有用な例を提供します。
+-----------+-----------+----------+
| input 1 | input 2 | output |
+-----------+-----------+----------+
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
+-----------+-----------+----------+
入力 1 と 2 が相関しておらず, この方法で結合されている場合, 出力は入力よりもさらに良い (偏りの少ない) ランダムビットになります。セクション 4.1 で定義された "偏心率" E を仮定すると, 出力偏心率は次のように入力偏心率に関連します:
E = 2 * E * E
output input 1 input 2
E は 1/2 を超えることがないため, 少なくとも 1 つの入力が完全に偏った定数である場合を除き, 偏心率は常に改善されます。これは次の表に示されています。ここで, 上部と左側の値は 2 つの入力偏心率であり, エントリは出力偏心率です:
+--------+--------+--------+--------+--------+--------+--------+
| E | 0.00 | 0.10 | 0.20 | 0.30 | 0.40 | 0.50 |
+--------+--------+--------+--------+--------+--------+--------+
| 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |
| 0.10 | 0.00 | 0.02 | 0.04 | 0.06 | 0.08 | 0.10 |
| 0.20 | 0.00 | 0.04 | 0.08 | 0.12 | 0.16 | 0.20 |
| 0.30 | 0.00 | 0.06 | 0.12 | 0.18 | 0.24 | 0.30 |
| 0.40 | 0.00 | 0.08 | 0.16 | 0.24 | 0.32 | 0.40 |
| 0.50 | 0.00 | 0.10 | 0.20 | 0.30 | 0.40 | 0.50 |
+--------+--------+--------+--------+--------+--------+--------+
ただし, 上記の計算は入力が相関していないことを前提としていることに注意してください。たとえば, 入力が真夜中からの分数のパリティであり, 数秒精度の 2 つのクロック上にあり, 各々がランダムに見える場合でも, 1 分よりもはるかに長いランダムな間隔でサンプリングされた場合, 両方がサンプリングされて XOR で結合されると, 結果はほとんどの時間ゼロになります。