データのエラーは2通りの方法で生じる.一つは,メモリーやハードディスクの製造時に おける欠陥である.もう一つは,稼働時のおける書き込みあるいは読み込みの間違い,あ るいはデータ保存時にビットが変化してしまうことによるエラーである.
前者のエラー,製造時のエラーは欠陥部分を使わないようにしてしまうことにより回避で きる.いつも,同じ場所でエラーが生じるので,検査によりそのビットを使わないように する.
ここで問題とするのは後者のエラーである.すなわち,装置に欠陥が無いものの,書き込 んだものと異なる値が読み出される場合である.これは熱や宇宙線の作用により,記憶装 置のビットが変化する場合に起きる.このようなビットの変化は,ランダムに生じ,時や 場所を特定することができない.
ランダムにビットが変化するようなエラーは,情報の保存のみならず,情報の伝達の時も 生じる.情報を伝達のケーブルの電圧を下げると熱振動によるノイズの影響によりビット が変化するかもしれない.また,通信速度を上げると,パルス幅が短くなり,トランジス ターが誤動作するかもしれない.
熱や宇宙線によるこれらのビットの変化が生じる確率は,ゼロでは無いが非常に少ない.問題の無 いレベルになるように,記憶装置や通信装置を慎重に設計を行わなければならない.ただ, ゼロにすることは不可能なので,ビットが変化しても情報が失われないように,データ蓄 積と転送のとき工夫する.
データ蓄積と転送は全く異なる技術に見えるが,ランダムにビットが変化するエラーを防 ぐためには同じような技術が使える.
データを読み出すときに,1の数を数えれば誤りの有無が分かる.もし,何らかの原因で どれか一つのビットが反転した場合,全体の1の数は奇数となるので,おかしいと気 付く.
この方法だと,二つのビットの誤り(二重誤り)には気付かない.どのようにすれば,二重 あるいは3重の誤りが分かるだろうか?
偶数パリティを加えることにより,正しい符号のハミング距離は2以上になる.パリティ ビットを含んだ符号全体の1の数は,いつも偶数であるからである.従って,一つの誤り が生じると,正しい場合に比べてハミング距離が1変化し,不当な符号になる.もし,2重 の誤りが生じると,正しい符号と区別がつかなくなる.従って,誤りの検出ができない.
このことを一般化すると,個の誤りを検出するためには,正しい符号のハミング距離 を以上にする必要がある(図1).
個のビットの誤りがある場合,ハミング距離が以上ならば,誤りを検出して訂 正までできる.このことを,図2を用いて説明する.この図,次 のように理解する.
実際に,誤りの訂正ができることを教科書のハミング符号で示す(図 3).この教科書のハミング符号によると,以下のようなこと が分かる.
実際に使われているハミング符号は,もっと高度なもので,高速に処理ができるようになっ ている.教科書のハミング符号は,分かりやすく書くために書かれており,処理の効率は 悪い.