0

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

В основном я студент, и это наше задание по внедрению ряда фибоначчи. Поэтому, делая эксперимент, я столкнулся с этой ситуацией.

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

+0

Я вижу, кто-то пытается TSQL Challenge # 20? Часть сложности этого трюка - это то, что вы только что узнали: единственное закрытое решение формы теряет свою точность где-то между 60-75 (мои тесты показали 62, но я еще раз проверю). Без решения закрытой формы вы, похоже, вынуждены использовать рекурсивный метод (который имеет паршивую производительность). К счастью, я придумал умное решение некоторое время назад. * К сожалению * я не буду делиться им до тех пор, пока не завершится первый раунд записей. Тогда вы сможете увидеть мое решение. :-) – RBarryYoung

ответ

4

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

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

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

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

Смежные вопросы