ただいま基本情報の勉強をしています。
ある本に、「パリティチェックでは1ビットの誤りを検出できる」とありましたがよく意味がわかりません。
1ビットの誤りもあるだろうし、複数個のビットの誤りもあるから「1ビット」という表現には違和感を感じます。
どなたか意味をわかりやすく教えてください。
答え:
パリティチェックは、1ビットの誤り「のみ」検出できます。2ビット以上誤った場合は検出できる保証はありません。
例題)
データ4ビット+パリティ1ビット、偶数チェック(奇数もあります)の場合
データとパリティの 1 の数が偶数になるように、パリティを決めます。
例:
データが 1000 のとき、最後につけるパリティは 1 です。10001で1が2つ
データが 1111 のとき、最後につけるパリティは 0 です。11110で1が4つ
10001を送信したとき、どこかで誤って1ビット反転しました。
届いたデータは 10011 です。ここで「1が3つ?偶数じゃない!これはおかしい」となるわけです。
ところが、10001を送信したとき、どこかで誤って2ビット反転しました。
届いたデータは 00011 です。ここで「1が2つ。これは正常」となってしまいます。
奇数個の誤りは検出できるのですが、偶数個では正常に見えてしまいます。そのため「1ビットの誤りを検出できる」ということなのです。
補足の質問:
すっきりしました。ありがとうございました。この質問・回答は役に立ちましたか?
答え:
パリティはビットの集団(バイトとかワードとか)の中に"1"が偶数個あるか奇数個あるかを表すことしかできません。
たとえばメモリにありデータを書き込む時に、その書くデータの中の"1"の数を数えて「偶数だったらパリティを1にする」というルールにしておけば
メモリから読み出すときに、偶数か奇数かを調べ、その結果がパリティと同じだったら「正しい」と判定できます。もし読み出したデータの中の1の個数が偶数/奇数であるかという結果とパリティが一致しなければ、「データかパリティのどちらかがおかしい」という風に検出できるわけです。
これがパリティの原理ですが、このようにパリティは偶数か奇数かということしか表すことができないので、2ビットの誤りが発生すると、偶数/奇数は変化しないので、パリティだけではそのデータが誤っているのか正しいのかわからないのです。これが1ビットの誤りだけを検出できるという意味です。
書き込むとき11001010(1) ()内がパリティ。1の数が偶数個なのでパリティは1
読み出したとき 11001010(1)を読み出したとすると1の数の偶数/奇数とパリティは一致しているので「正しい」と判定する。
読み出したとき 10001010(1)を読み出すと、1の数の偶数/奇数とパリティは一致しないので「正しくない」と判定する。
同様に 11001010(0)と読み出すとデータは正しいのにパリティが違っているので「正しくない」と判定する。
読み出したとき 10101010(1)を読み出すと(2ビット違うのがわかりますか?)データが違うのにも関わらず偶数/奇数とパリティが合ってるので「正しい」と判定されてしまう。
このように、パリティエラーが起きたとき、正しくないのはデータとパリティのどちらかか?というのがわからないのと、
2ビット以上エラーがあるとお手上げ。というのがパリティの限界です。
このあたりを改善するためにECCなどの誤り訂正手法が使われています。
他は答える:
偶数個のビット誤りがあった場合には、パリティチェックでは検出できません。
通信でもメモリーでも確率としては2つ以上同時に誤りがでることは、大変まれな出来事です。事実上無視しても良いぐらいの可能性です。
従って、パリティチェックをしておけば十分なエラーチェックになるということです。
ウェブサイトのユーザーによる情報ポスト、JPQA.comのない保証の正しさ.