O uso da aritmética de ponto fixo pode ser apropriado sob certas circunstâncias. Geralmente para a computação científica (pelo menos no sentido em que a maioria das pessoas pensa), não é apropriado devido à necessidade de expressar as grandes faixas dinâmicas encontradas. Você menciona problemas de autovalor como um exemplo, mas, com frequência, na ciência, interessa-se nos menores autovalores de uma matriz (digamos, em calcular o estado fundamental de um sistema quântico). A precisão dos valores próprios pequenos geralmente será bastante deteriorada em relação aos valores próprios grandes se você usar um ponto fixo. Se sua matriz contiver entradas que variam por grandes proporções, os pequenos valores próprios podem ser completamente inexprimíveis na precisão de trabalho. Este é um problema com a representação de números; esses argumentos são válidos independentemente de como você faz os cálculos intermediários. Você poderia elaborar uma escala para aplicar aos resultados calculados, mas agora acabou de inventar o ponto flutuante. É fácil construir matrizes cujos elementos são bem comportados, mas cujos valores próprios são excessivamente mal comportados (comoMatrizes de Wilkinson , ou mesmo matrizes com entradas inteiramente inteiras ). Esses exemplos não são tão patológicos quanto podem parecer, e muitos problemas na vanguarda da ciência envolvem matrizes muito mal comportadas; portanto, usar um ponto fixo nesse contexto é uma Bad Idea (TM).
Você pode argumentar que conhece a magnitude dos resultados e deseja não desperdiçar bits no expoente, então vamos falar sobre os intermediários. O uso de ponto fixo geralmente exacerba os efeitos de cancelamentos e arredondamentos catastróficos, a menos que você realmente se esforce ao máximo para trabalhar com maior precisão. A penalidade de desempenho seria enorme e eu suporia que o uso de uma representação de ponto flutuante com a mesma largura de bit de mantissa seria mais rápido e preciso.
Uma área em que o ponto fixo pode brilhar é em certas áreas da computação geométrica. Especialmente se você precisar de aritmética exata ou conhecer antecipadamente a faixa dinâmica de todos os números, o ponto fixo permite que você aproveite todos os bits em sua representação. Por exemplo, suponha que você queira calcular a interseção de duas linhas e, de alguma forma, os pontos finais das duas linhas sejam normalizados para ficar no quadrado da unidade. Nesse caso, o ponto de interseção pode ser representado com mais bits de precisão do que usando um número de ponto flutuante equivalente (que desperdiçará bits no expoente). Agora, é quase certo que os números intermediários necessários neste cálculo precisam ser calculados com maior precisão ou, pelo menos, com muito cuidado (como ao dividir o produto de dois números por outro número, você precisa ter muito cuidado com isso ). Nesse sentido, o ponto fixo é mais vantajoso do ponto de vista da representação do que do ponto de vista computacional, e eu diria que isso geralmente é verdade quando você pode estabelecer limites superiores e inferiores definidos na faixa dinâmica das saídas do seu algoritmo . Isso acontece raramente.
Eu costumava pensar que as representações de ponto flutuante eram grosseiras ou imprecisas (por que desperdiçar bits em um expoente ?!). Mas, com o tempo, percebi que realmente é uma das melhores representações possíveis para números reais. As coisas da natureza aparecem em escalas de log; portanto, dados reais acabam abrangendo uma grande variedade de expoentes. Também para alcançar a maior precisão relativa possível, é necessário trabalhar em escalas de log, tornando o rastreamento de um expoente mais natural. O único outro candidato a uma representação "natural" é o índice de nível simétrico . No entanto, adição e subtração são muito mais lentas nessa representação e carece do suporte de hardware da IEEE 754. Uma quantidade enorme de pensamento foi colocada nos padrões de ponto flutuante, por um pilar de álgebra linear numérica. Eu acho que ele sabe qual é a representação "certa" dos números.