Saltar al contenido

El error que estuvo veinte años en los libros

En 2006, Joshua Bloch contó que la búsqueda binaria de la biblioteca de Java tenía un error desde hacía años, y que la misma línea estaba en muchos libros: medio ← (bajo + alto) / 2. Con arrays de más de mil millones de valores, la suma bajo + alto supera el máximo de un entero de 32 bits y da un número negativo.

Por eso el pseudocódigo de este tema calcula medio ← bajo + (alto − bajo) / 2: nunca suma dos índices grandes.

El mismo error puede aparecer con enteros más pequeños; aplícalo a un caso con límites más cercanos.

En un lenguaje con enteros de 8 bits sin signo (máximo 255), un array de 200 valores tiene bajo = 150 y alto = 200. ¿Qué ocurre con (bajo + alto) / 2 y qué fórmula es segura?