Como calcular a média de 2 `unsigned int` sem overflow
(devblogs.microsoft.com)- Somar e dividir por 2 pode causar overflow
→ (a + b) / 2
- Se você souber qual dos dois é o maior, também dá para pegar a diferença entre os dois valores, somá-la ao menor e dividir por 2
→ low + (high - low) / 2
- Um algoritmo que funciona mesmo sem saber qual é o maior teve a patente expirada em 2016
→ (a / 2) + (b / 2) + (a & b & 1)
- SWAR : SIMD within a register
→ (a & b) + (a ^ b) / 2
- Se o compilador suportar 64 bits, faça cast
→ ((unsigned long long)a + b) / 2
- E depois vêm os códigos em assembly para cada processador... consulte o texto original
1 comentários
O blog de Raymond Chen, The Old New Thing, aborda uma grande variedade de temas, desde histórias dos bastidores do desenvolvimento do Windows.
No Brasil, foi publicada uma tradução com o título "As 282 Histórias do Desenvolvimento do Windows de Raymond Chen", mas atualmente está esgotada.