- O snippet mais copiado, escrito por Andreas Lundblad em 2010, tem um defeito.
- Esse snippet é uma solução para o problema de exibir uma contagem de bytes em um formato legível por humanos. Por exemplo, representar 123.456.789 bytes como "123.5 MB".
- A solução de Lundblad usa logaritmos em vez de um loop para calcular o sufixo apropriado (kB, MB, GB etc.).
- Esse snippet tornou-se o mais copiado após ser identificado no estudo de 2018 intitulado "Usage and Attribution of Stack Overflow Code Snippets in GitHub Projects".
- O estudo descobriu que a maioria das pessoas não inclui a atribuição adequada ao copiar código do Stack Overflow.
- O defeito no snippet de Lundblad é um erro de arredondamento quando a contagem de bytes se aproxima de 1 MB. Por exemplo, uma entrada de 999.999 bytes produz "1000.0 kB" em vez do correto "1.0 MB".
- Lundblad fornece uma versão corrigida do código que lida com esse problema e outros casos extremos. Isso inclui entradas negativas e limites de precisão de
double.
- As principais lições deste artigo são a importância de testar todos os casos extremos, a complexidade da aritmética de ponto flutuante e a necessidade de atribuição adequada ao copiar código.
1 comentários
Comentários do Hacker News
if, e que isso poderia ser simplificado com busca binária.log(), uma chamada depow()e o uso deceil()no código, sugerindo que uma abordagem mais simples poderia ser mais eficaz.logde ponto flutuante e de divisão aplicada a inteiros no código é criticado por ser excessivamente complexo e propenso a bugs.