An improved decoder and decoding method for low density parity check
(LDPC) codes is provided. Decoding proceeds by repetitive message passing
from a set of variable nodes to a set of check nodes, and from the check
nodes back to the variable nodes. The variable node output messages
include a "best guess" as to the relevant bit value, along with a weight
giving the confidence in the guess (e.g., weak, medium or strong). The
check node output messages have magnitudes selected from a predetermined
set including neutral, weak, medium and strong magnitudes. The check node
output messages tend to reinforce the status quo of the input variable
nodes if the check node parity check is satisfied, and tend to flip bits
in the input variable nodes if the check node parity check is not
satisfied. The variable node message weights are used to determine the
check node message magnitudes.