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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top