Saltar al contenido

Cuando un bit se corrompe, y cómo arreglarlo sin saber cuál es

Cómo un ordenador encuentra y arregla un bit estropeado sin saber cuál es: el código de Hamming, sus límites y SECDED. Curso de IA, 0.3.

Ramón Invarato
Una fila de cubos de cristal sobre un suelo negro, con uno de ellos brillando en rojo y tres piezas más altas que vigilan la fila, ante un fondo azul oscuro con una franja de luz cálida

Todo lo que guarda un ordenador son números en binario, y a veces uno de esos bits cambia solo: un 0 se vuelve 1 dentro de una memoria o por el camino. Añadiendo tres bits a cada cuatro, un ordenador puede encontrar el bit erróneo y arreglarlo sin que nadie le diga cuál es, siempre que el erróneo sea uno solo.

Toca esto primero

Abre la herramienta Código Hamming con los datos 1011. La tool añade tres bits y devuelve 0110011: siete bits donde antes había cuatro. Los de las posiciones 1, 2 y 4 son los añadidos (bits de paridad); los otros cuatro son tus datos.

Los datos 1011 en la herramienta Código Hamming: la palabra codificada 0110011, con los bits de paridad p1, p2 y p4 en naranja

Ahora abre la misma palabra con el quinto bit erróneo, como si hubiera cambiado por el camino (en la tool es el que pone p5, en Simula un error; también puedes cambiarlo tú haciendo clic en él). La tool responde «Corregido — error en posición 5», y nadie le ha dicho cuál era.

Con el quinto bit cambiado, la tool responde «Corregido — error en posición 5», síndrome 5 = 101 en binario

Siguiente: la palabra con los bits quinto y segundo erróneos. Dos bits cambiados. La respuesta es «Corregido — error en posición 7», y el 7 estaba bien. El decodificador acaba de cambiar un bit correcto y da el resultado por bueno: los cuatro datos que salen ya no son 1011 sino 1110. (El cuadro de aviso que aparece debajo lo pone la tool para explicártelo; un decodificador de verdad no lo pondría.)

Con los bits 5 y 2 cambiados, la tool responde «Corregido — error en posición 7» y cambia un bit que estaba bien

Por último, los mismos dos errores con SECDED activado (SECDED es una variante que se explica más abajo). Ahora la respuesta es «Error doble detectado».

Los mismos dos errores con SECDED: la palabra lleva un octavo bit, P0, y la respuesta es «Error doble detectado»

Qué acaba de pasar

En la memoria de un ordenador, un bit puede cambiar solo por ruido eléctrico o por partículas alfa, según explica Synopsys, que diseña controladores de memoria; y un mensaje que viaja por un cable o por el aire también puede llegar con algún bit cambiado.

La forma más sencilla de enterarse es el bit de paridad: se añade un bit que hace que el número total de unos sea siempre par. Si llega impar, algo ha cambiado. Pero solo dice que hay un error, no dónde está.

Lo que hizo Richard Hamming fue usar varios bits de paridad, cada uno vigilando un grupo distinto de posiciones, y hacer que esos grupos se solapen. Lo tienes en la tabla Cobertura de cada bit de paridad de la tool:

  • P1 vigila las posiciones 1, 3, 5 y 7.
  • P2 vigila las posiciones 2, 3, 6 y 7.
  • P4 vigila las posiciones 4, 5, 6 y 7.
La tabla de cobertura: qué posiciones vigila cada bit de paridad, P1, P2 y P4

Cuando cambia el bit 5, se quejan los dos que lo vigilan, P1 y P4, pero P2 no. Suma los que se quejan: 1 + 4 = 5. Esa suma es la posición del error. La tool la escribe como «síndrome 5 = 101₂»: en binario, cada cifra dice si una comprobación ha fallado (P4 sí, P2 no, P1 sí). Se llama síndrome, como en medicina: el conjunto de síntomas señala dónde está el problema. Si quieres seguir este proceso paso a paso, con todas las reglas y mucho más detalle, está explicado en Código de Hamming: detección y corrección de errores.

Sin embargo, con dos errores, el truco de la autocorrección se vuelve en nuestra contra. El bit 5 hace quejarse a P1 y a P4; el bit 2, a P2. Se quejan los tres, 1 + 2 + 4 = 7, y el código, que está construido suponiendo que solo hay un error, señala la posición 7 y da la palabra por corregida, aunque sigue estando mal.

SECDED (Single Error Correction, Double Error Detection, «corrige un error, detecta dos») añade un bit más, el P0, que va delante de todos y vigila la paridad de la palabra entera. Por eso con SECDED la palabra tiene ocho bits en vez de siete. Con un error, las dos pistas coinciden y se corrige. Con dos, los grupos dicen que algo va mal pero la paridad total cuadra; eso solo es posible si ha cambiado un número par de bits, así que en vez de «corregir» avisa de un error doble.

La idea nació de un fastidio. A finales de los años cuarenta, Hamming usaba un ordenador de relés de los Laboratorios Bell que, cuando detectaba un error y no había operarios (por las noches y los fines de semana), abandonaba el trabajo y pasaba al siguiente. Hamming trabajaba precisamente los fines de semana, y cada error le obligaba a empezar sus programas desde cero. Según contó él mismo (traducido del inglés): «Maldita sea, si la máquina puede detectar un error, ¿por qué no puede localizar dónde está y corregirlo?» (Hamming code, en la Wikipedia en inglés, que cita la entrevista). Publicó la respuesta en 1950, en el Bell System Technical Journal.

Y sigue en uso: los módulos de memoria DDR4 con ECC (Error-Correcting Code, «código corrector de errores») de los servidores usan un esquema SECDED con 8 bits de control por cada 64 de datos (Synopsys).

El error típico

Podrías pensar que los bits de paridad son espacio perdido: en el ejemplo, 3 de cada 7 bits no llevan datos. Pero ese coste baja deprisa cuando el bloque crece (lo puedes comprobar en «Pruébalo tú mismo», más abajo), y lo que se consigue con él es poder arreglar un error sin volver a pedir el mensaje.

La segunda confusión es más peligrosa: leer «Corregido» como «correcto». El código garantiza lo que promete solo si se cumple lo que supone (como mucho, un error por palabra). Fuera de eso no se detiene ni avisa: devuelve una respuesta equivocada con la misma seguridad que una buena. Es un comportamiento que conviene reconocer pronto, porque es el mismo que tiene cualquier sistema que responde siempre, incluidos los modelos de IA.

Pruébalo tú mismo

En la pestaña Codificar del Código Hamming, escribe 11 bits de datos cualesquiera y mira cuántos bits de paridad añade la tool y qué tasa (la parte de la palabra que son datos) sale. Antes de hacerlo con 26 bits, apuesta: ¿cuántos bits de paridad necesitará? Compruébalo.

Después, abre el Simulador: manda 2000 veces unos datos por un canal donde cada bit tiene un 2 % de probabilidad de estropearse. Pulsa Simular con SECDED apagado y otra vez con SECDED encendido. Fíjate en la línea Fallo silencioso. Luego sube la probabilidad al 10 %. ¿Por qué crece mucho más deprisa el fallo silencioso que la probabilidad de fallo de cada bit? Piensa en qué tiene que ocurrir para que haya uno.

Los números del simulador son aleatorios, así que cambian un poco en cada ejecución; lo que importa es cómo se mueven al cambiar los ajustes.

Si quieres más

«Cuando un bit se corrompe, y cómo arreglarlo sin saber cuál es», de Ramón Invarato en jarroba.com, con licencia Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0. Obra registrada en Safe Creative.

Ramón Invarato

Diseño y construyo plataformas de datos y sistemas inteligentes, y me motiva compartir esa experiencia aquí.

Te puede interesar

Una imagen es una tabla de números

Una foto es una tabla de números: tres por píxel, rojo, verde y azul. Lo ves en una manzana y por qué su rojo son miles de números. Curso de IA, 0.2.

10 Nov 2026

Comentarios

Deja un comentario


Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.