Cómo calcular el promedio de 2 `unsigned int` sin overflow
(devblogs.microsoft.com)- Sumar y luego dividir entre 2 provoca overflow
→ (a + b) / 2
- Si sabes cuál de los dos números es mayor, también puedes sumar la diferencia entre ambos al menor y luego dividir entre 2
→ low + (high - low) / 2
- Hay un algoritmo que funciona incluso si no sabes cuál es el mayor; la patente expiró en 2016
→ (a / 2) + (b / 2) + (a & b & 1)
- SWAR: SIMD within a register
→ (a & b) + (a ^ b) / 2
- Si el compilador soporta 64 bits, haz un cast
→ ((unsigned long long)a + b) / 2
- Y después vienen los códigos en ensamblador para cada procesador... consulta el texto original
1 comentarios
El blog de Raymond Chen, The Old New Thing, aborda una gran variedad de temas, desde historias entre bastidores del desarrollo de Windows hasta muchos otros asuntos.
En Corea se publicó una traducción titulada "282 historias del desarrollo de Windows de Raymond Chen", pero actualmente está descatalogada.