Bug da CPU Intel nos anos 90
Meu professor que ensina "Lógica" na universidade nos contou uma história sobre processadores Intel, que diz: Nos anos 90, a Intel tinha um bug no cálculo de funções matemáticas como sen / cos codificadas no processador. Este bug criou inconsistências em algumas contas bancárias, levando a Intel a contratar lógicos para demonstrar a correção do código.
Tentei pesquisar esta história na web mas não encontrei nada. Alguém sabe alguma coisa sobre isso ou alguém pode me dar algumas fontes?
Respostas
Suspeito que seu professor estava se referindo ao bug do FDIVPentium , que gerou um grande protesto na mídia na época e para o qual a Intel emitiu um recall.
Este bug fazia com que a divisão de ponto flutuante retornasse resultados incorretos em alguns casos. Não afetou apenas FDIV, algumas instruções relacionadas foram afetadas: a outra divisão e instruções restantes, e FPTANe FPATAN. Outras instruções trigonométricas foram tratadas com suspeita, mas acabaram sendo liberadas, incluindo FSINe FCOS.
No entanto, parece improvável que isso causasse problemas nos bancos: os aplicativos financeiros normalmente evitam representações de ponto flutuante, portanto, os erros em uma instrução de ponto flutuante provavelmente não os afetariam.
Veja também a entrada da Wikipedia sobre este bug . Outro bug famoso do Pentium era o bug F00F , que não causava erros de cálculo; isso poderia levar a travamentos e era contornado por tratamento específico em sistemas operacionais.
Stephen Kitt já deu uma boa resposta sobre o bug FDIV. Vou preencher alguns detalhes sobre a Intel que emprega lógicos:
Por causa desse bug, a Intel teve que substituir muitos processadores, o que era muito caro. Não querendo repetir isso, eles contrataram vários cientistas da computação com experiência em lógica formal para provar a exatidão dos algoritmos a serem implementados nos sucessores do pentium. Se você quiser saber mais sobre suas pesquisas, confira as publicações de dois desses cientistas:https://www.cl.cam.ac.uk/~jrh13/papers/index.html, https://scholar.google.com/citations?user=MACCA0cAAAAJ&hl=en
A Intel tinha um conjunto bastante complexo de hardware para calcular um quociente de ponto flutuante de uma forma que produzia dois bits por iteração, o que exigia uma tabela bastante grande listando todas as combinações de padrões de bits onde parte do quociente deveria ser 11 [em vez de listando todos os padrões individualmente, a tabela teria entradas onde cada bit pode ser 0, 1 ou X, de modo que, por exemplo, um padrão de bits de 100X01X corresponderia a 1000010, 1000011, 1001010 ou 1001011, então a tabela não precisava de um número impossivelmente grande de entradas]. Infelizmente, parte da tabela foi corrompida quando estava sendo transferida de qualquer ferramenta usada para gerá-la, para o design do chip.
Acho essa abordagem de divisão um tanto curiosa, uma vez que teria sido rápido examinar o divisor e produzir um valor que, quando multiplicado pelo divisor (arredondando para cima) e dividendo (arredondando para baixo), forçaria o novo divisor a ter seu bits superiores iguais a 0,1111 ou 0,111111111, o que tornaria mais fácil extrair 4 ou 8 bits por iteração. O quociente final provavelmente seria ligeiramente menor do que o valor correto [nunca maior, dadas as direções de arredondamento anteriores], mas seria próximo o suficiente para que apenas duas ou três etapas de aproximação sucessivas fossem necessárias no final para limpar as coisas pra cima.
Em qualquer caso, a ironia final com o bug do Intel FDIV é que, antes, durante a era 386/387, havia um produto concorrente de Weitek que podia executar matemática de ponto flutuante de precisão simples muito mais rápido do que os chips da Intel, mas não não faço matemática de dupla precisão. Alguns programas que normalmente teriam usado matemática de precisão dupla foram enviados para o Weitek, que usava matemática de precisão simples e, portanto, produziu resultados menos precisos. A equipe de marketing da Intel decidiu explorar essa falta de precisão (projetada e considerada aceitável) produzindo um anúncio que mostrava uma placa-mãe com uma calculadora de loja de dez centavos decorada com gráficos de palhaço onde deveria estar a CPU e a legenda "Peça genuína Intel Math CoProcessors, ou quem sabe com que matemática você terá que contar ".
Acho que isso provavelmente se refere ao bug do Pentium FDIV ( bug de divisão de ponto flutuante).
Não me lembro de nenhum problema específico com instruções de trigonometria.