Функции POWER и SQRT |
|||||||||||||||||||||||||||||||||||||
Функция SQL Server POWER (x, y ) возводит x в степень y. x является выражением типа FLOAT, или типа, неявно приводимого к FLOAT. y - выражение числового типа. Возвращаемое значение имеет тип выражения x. Функция SQRT (x) вычисляет корень квадратный из x, при этом x является выражением типа FLOAT, или неявно приводимого к нему. Результат имеет тип FLOAT. Функция SQRT является обратной к функции POWER(x,2), т.е. SQRT(POWER(x,2)) должна возвращать x. Проверим это
Правильно. Однако даст
Этот неожиданный результат, вероятно, связан с потерей точности при неявном преобразовании результата функции POWER (который соответствует типу аргумента, т.е. numeric) к типу данных FLOAT. Действительно,
Если применить эквивалентное преобразование, которое сохраняет тип NUMERIC для возвращаемого результата,
Аналогичный результат мы получим, применив преобразование типа данных аргумента функции POWER к FLOAT в примере с использованием SQRT. В этом случае функция POWER вернет значение типа FLOAT, и преобразование не потребуется. Действительно,
Если же изменить порядок применения функций, то никаких "чудес" не возникает:
В этом примере функция SQRT возвращает результат типа FLOAT, что не требует преобразования. |