Question

Si je demande Binet formule et formule récursive pour trouver la série Fibonaci, il y a une différence dans le résultat. Pourquoi?

En fait, je suis un étudiant et il est de notre mission de mettre en œuvre la série de fibonacci. Ainsi, tout en faisant l'expérience, je suis tombé sur cette situation.

Merci d'avance

Était-ce utile?

La solution

Le nombre de Fibonacci est généré en utilisant l'arithmétique des nombres entiers. La formule Binet utilise l'arithmétique à virgule flottante. calculs à virgule flottante aura toujours ces petites erreurs car tous les nombres réels peuvent être représentés avec précision.

Plus précisément, un float 8 octets dans SQL Server uniquement a une 15- chiffres mantisse . Il ne peut pas être plus précis que 15 points après la virgule. Pas par hasard, les erreurs que vous voyez se produire au 15 chiffres. Je hasarder une hypothèse que les chiffres ci-dessous 70 sont exacts, car ils sont dans les limites de précision d'un float.

En d'autres termes, ce comportement est par conception. Il y a une limite à la précision que vous pouvez réaliser avec les mathématiques à virgule flottante, et que vous avez frapper. Pour aller au-delà, vous auriez à utiliser une bibliothèque mathématique précision arbitraire, et je ne suis pas au courant d'aucune disponible dans l'environnement SQL Server (bien que cela ne signifie pas nécessairement qu'ils n'existent pas).

P.S. La récursivité est un procédé très inefficace de génération d'un nombre de Fibonacci, en particulier dans une base de données. Si cela est plus qu'un exercice académique alors je vous recommande de passer à une solution itérative.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top