Differences
This shows you the differences between two versions of the page.
work:2024-4 [2024/01/22 11:59] – created magsilva | work:2024-4 [2024/01/23 01:52] (current) – magsilva | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Semana 4 de 2024 ====== | ====== 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:// | ||
+ | * Explicação do desenvolvedor sobre o erro: http:// | ||
+ | * Vídeo sobre o erro: https:// | ||
===== Miscelânea ===== | ===== Miscelânea ===== |