Semana 4 de 2024
Ensino
- Caso interessante de erros desapercebidos em algoritmos do cotidiano. Por muitos anos, a implementação de referência do Java possuía um erro na busca binária. Em Java, um array (agregado sequencial homogêneo de dados?) possui um tamanho máximo, correspondente ao maior número inteiro (int, 2^64). Na busca binária, é necessário encontrar iterativamente o elemento do meio da sequência de dados ordenados, usando como base os índices da esquerda e da direita. Eis aí o problema: se o array for muito grande e os valores dos índices à esquerda e à direita forem também grandes, a conta trivial típica (índice_esquerdo + índice_direito) / 2 pode causar um estouro (overflow) do número inteiro. Felizmente, é possível substituir esta conta por uma em que nunca ocorre o estouro do número: índice_esquerdo + (índice_direito - índice_esquerdo) / 2. Referências:
- Relato original do erro do Sun JDK: https://bugs.java.com/bugdatabase/view_bug?bug_id=5045582
- Explicação do desenvolvedor sobre o erro: http://blog.research.google/2006/06/extra-extra-read-all-about-it-nearly.html
- Vídeo sobre o erro: https://www.youtube.com/watch?v=_eS-nNnkKfI
Miscelânea
- Cansado de abrir mensagens longas cortadas automaticamente pelo Gmail, instalei a extensão Trimless for Google Mail. Para que ela funcione adequadamente, é necessário desativar as opções para indentação e alteração de cores na configuração da extensão. Feito isso, ela funciona perfeitamente! Criei um fork dela em https://github.com/magsilva/trimless-gmail para, quem sabe, revisá-la.