Функции SQL Server и MS Access Standard Deviation (StDev), генерирующие различные результаты


Я запустил функцию StDev как в MS Access, так и в SQL Server с теми же самыми точными данными. Два фрагмента данных 2.32 и 2.32 должны привести к StDev 0, результат, который генерирует SQL Server. Однако MS отрыть генерирует следующий результат... 4.2146848510894 E-08. Это создает серьезные проблемы для моей логики базы данных, но меня не интересует, как это исправить, а скорее, если кто-то еще столкнулся с подобными проблемами и если кто-то знает, почему они вычисляют разные результаты?

2 2

2 ответа:

Функция StDev() возвращает значение Double, поэтому вам придется учитывать ошибку с плавающей запятой, если вы используете эти значения в выражениях, выполняющих сравнения. В частности, никогда не следует использовать значения Double при проверке точного равенства (например, myStDevValue=0). Вместо этого вы должны либо проверить для

  • значения, которые "достаточно близки", чтобы считаться равными,

Или для частного случая стандартного отклонения

  • значения, которые достаточно велики (или меньше), чем указанная доля среднего значения, которое считается значительным (или незначительным).

Во-первых, убедитесь, что вы используете соответствующие типы данных в обеих системах.

Во-вторых, вы, вероятно, сталкиваетесь с теми же проблемами точности, с которыми сталкивается MS Excel. См. это обсуждение, эта статья поддержки MS и подробное объяснение в Википедии.

В чем разница? Эти две системы разработаны с учетом различных спецификаций и требований.