X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=hamming32.c;h=a27725318e5fab6893bcb653dd89c9162afb2abc;hb=fb9bc5893a549544f90236a03ab5b5857b53afd7;hp=5ef403f568c252af063fd7e0948f4ba8f3e91612;hpb=1d55fbd199baa6e65d0b0802cb058b1d103bb25d;p=hamming diff --git a/hamming32.c b/hamming32.c index 5ef403f..a277253 100644 --- a/hamming32.c +++ b/hamming32.c @@ -34,9 +34,9 @@ unsigned generate_parity(unsigned data) unsigned parity3 = find_parity_32(data & 0x01c78f0f); unsigned parity4 = find_parity_32(data & 0x003f80ff); unsigned parity5 = find_parity_32(data & 0x00007fff); - unsigned parity6 = find_parity_32(data & 0x03b4e986); + unsigned parity6 = find_parity_32(data & 0x03b4e996); - return parity6 | (parity5 << 1) | (parity4 << 2) | (parity3 << 3) | (parity4 << 4) | (parity5 << 5); + return parity6 | (parity5 << 1) | (parity4 << 2) | (parity3 << 3) | (parity2 << 4) | (parity1 << 5); } unsigned make_codeword(unsigned data) @@ -79,15 +79,15 @@ int has_double_error(unsigned code) unsigned extra_parity = find_parity_32(code); /* no errors at all (user should have used has_error() first; boo, hiss) */ - if (hamming_parity == gen_hamming_parity && extra_parity == 1) + if (hamming_parity == gen_hamming_parity && extra_parity == 0) return 0; /* both hamming and simple parity errors; this is a single-bit error */ - if (hamming_parity != gen_hamming_parity && extra_parity == 0) + if (hamming_parity != gen_hamming_parity && extra_parity == 1) return 0; /* hamming says OK, but simple parity indicates an error => simple parity error is wrong */ - if (hamming_parity == gen_hamming_parity && extra_parity == 0) + if (hamming_parity == gen_hamming_parity && extra_parity == 1) return 0; /* hamming says error, simple parity says OK => DOUBLE ERROR */