Вопрос

Если я применяю формулу Бине и Рекурсивную формулу для нахождения ряда фибоначчи, возникает расхождение в результате.Почему?

По сути, я студент, и это наше задание - реализовать ряд Фибоначчи.Итак, проводя эксперимент, я столкнулся с такой ситуацией.

Заранее спасибо

Это было полезно?

Решение

Число Фибоначчи генерируется с помощью целочисленной арифметики.Формула Бине использует арифметику с плавающей запятой.Вычисления с плавающей запятой всегда будут иметь эти небольшие неточности, потому что не каждое действительное число может быть представлено точно.

В частности, 8-байтовый float в SQL Server есть только 15-значная мантисса.IT не может будьте не более точны, чем 15 знаков после запятой.Не случайно ошибки, которые вы видите, происходят на 15-й цифре.Я бы рискнул предположить, что цифры ниже 70 являются точными, потому что они находятся в пределах точности float.

Другими словами, такое поведение является преднамеренным.Существует предел точности, которой вы можете достичь с помощью математики с плавающей запятой, и вы достигли его.Чтобы выйти за рамки этого, вам пришлось бы использовать математическую библиотеку произвольной точности, и я не знаю ни одной доступной в среде SQL Server (хотя это не обязательно означает, что они не существуют).

P.S.Рекурсия - это очень неэффективный метод генерации числа Фибоначчи, особенно внутри базы данных.Если это нечто большее, чем академическое упражнение, то я бы рекомендовал перейти к итеративному решению.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top