Почему возникает расхождение в результате?
-
22-09-2019 - |
Вопрос
Если я применяю формулу Бине и Рекурсивную формулу для нахождения ряда фибоначчи, возникает расхождение в результате.Почему?
По сути, я студент, и это наше задание - реализовать ряд Фибоначчи.Итак, проводя эксперимент, я столкнулся с такой ситуацией.
Заранее спасибо
Решение
Число Фибоначчи генерируется с помощью целочисленной арифметики.Формула Бине использует арифметику с плавающей запятой.Вычисления с плавающей запятой всегда будут иметь эти небольшие неточности, потому что не каждое действительное число может быть представлено точно.
В частности, 8-байтовый float
в SQL Server есть только 15-значная мантисса.IT не может будьте не более точны, чем 15 знаков после запятой.Не случайно ошибки, которые вы видите, происходят на 15-й цифре.Я бы рискнул предположить, что цифры ниже 70 являются точными, потому что они находятся в пределах точности float
.
Другими словами, такое поведение является преднамеренным.Существует предел точности, которой вы можете достичь с помощью математики с плавающей запятой, и вы достигли его.Чтобы выйти за рамки этого, вам пришлось бы использовать математическую библиотеку произвольной точности, и я не знаю ни одной доступной в среде SQL Server (хотя это не обязательно означает, что они не существуют).
P.S.Рекурсия - это очень неэффективный метод генерации числа Фибоначчи, особенно внутри базы данных.Если это нечто большее, чем академическое упражнение, то я бы рекомендовал перейти к итеративному решению.