Функция POWER в SQL Сервер с отрицательными числами - PullRequest
1 голос
/ 18 марта 2020

Я хотел бы вычислить третье root отрицательного числа, используя функцию POWER (в SQL Server 2019)

SELECT POWER(-8.000, 1.000 / 3)

, но я продолжаю получать эту ошибку:

Произошла недопустимая операция с плавающей запятой.

Отлично работает для положительных чисел.

Есть идеи, что тут не так?

Ответы [ 2 ]

3 голосов
/ 18 марта 2020

У меня нет объяснения, почему ваш куб root вызов POWER не работает. Однако, учитывая, что вход является отрицательным числом (-8), выход должен быть эквивалентен отрицательному значению куба root положительного входа:

SELECT -1.0*POWER(8.000, 1.000 / 3) AS output;

Это выводит -2.000 как ожидается. Вы можете даже написать более общие логики c, чтобы обойти эту проблему:

SELECT
    CASE WHEN input > 0 THEN POWER(input, 1.000 / 3)
         ELSE -1.0*POWER(-1.0*input, 1.000 / 3) END AS output
FROM yourTable;
0 голосов
/ 18 марта 2020

Причина, по которой ваши вычисления не работают, заключается в том, что:

(-8)^(1/3)              --> an integer, -2
(-8)^(0.33333333333333) --> a complex number

То есть значения с плавающей запятой являются неточными и не могут представлять что-то около одной трети. И значение должно быть точно 1/3, чтобы значение было числом с плавающей запятой.

Если вы знаете, что значение может быть представлено как значение с плавающей запятой, то вы можете use:

sign(-8) * power(abs(-8), 1.0 / 3)

Примечание. Это работает не во всех случаях. Тривиально:

sign(-4) * power(abs(-4), 1.0 / 2)

вернет -2, что не является правильным ответом.

...