Error coding uses mathematical formulas to encode data bits into longer code words for transmission. This allows errors caused by environmental interference to be detected and sometimes corrected at the destination. There are two main types of error coding: error-detecting codes and error-correcting codes. Error-detecting codes add enough redundancy to allow errors to be detected but not corrected, while error-correcting codes add more redundancy to allow errors to be corrected. Common error-detecting coding techniques include parity checks, checksums, and cyclic redundancy checks (CRCs). These techniques use additional redundant bits appended to the data to facilitate error detection. CRC is particularly powerful as it can detect all single-bit errors and many burst errors.