Por que há uma discrepância no resultado?
-
22-09-2019 - |
Pergunta
Se eu aplicar fórmula de binete e fórmula recursiva para encontrar a série Fibonaci, há uma discrepância no resultado. Por quê?
Basicamente, sou estudante e é nossa tarefa implementar a série Fibonacci. Então, ao fazer o experimento, deparei com essa situação.
desde já, obrigado
Solução
O número de Fibonacci é gerado usando aritmética inteira. A fórmula do binete usa aritmética de ponto flutuante. Os cálculos de ponto flutuante sempre terão essas pequenas imprecisões, porque nem todo número real pode ser representado com precisão.
Especificamente, um 8 byte float
no servidor SQL tem apenas um Mantissa de 15 dígitos. Isto não podes ser mais preciso que 15 pontos decimais. Não por acaso, os erros que você está vendo ocorrem no 15º dígito. Eu arriscaria um palpite de que os números abaixo de 70 são precisos, porque estão dentro dos limites de precisão de um float
.
Em outras palavras, esse comportamento é por design. Há um limite para a precisão que você pode alcançar com matemática de ponto flutuante, e você acertou. Para ir além disso, você precisaria usar uma biblioteca de matemática de precisão arbitrária e não conheço nenhum disponível no ambiente do SQL Server (embora isso não signifique necessariamente que eles não existam).
PS Recursão é um método muito ineficiente de gerar um número de fibonacci, especialmente dentro de um banco de dados. Se isso for mais do que um exercício acadêmico, eu recomendaria mudar para uma solução iterativa.