SQL 服务器中的 POWER 函数为负数
POWER function in SQL Server with negative numbers
我想使用 POWER 函数计算负数的三次方根(在 SQL Server 2019 中)
SELECT POWER(-8.000, 1.000 / 3)
但我不断收到此错误:
An invalid floating point operation occurred.
它适用于正数。
知道这里出了什么问题吗?
我无法解释为什么您对 POWER
的立方根调用不起作用。但是,假设输入是负数(-8
),输出应该等于正输入的立方根的负数:
SELECT -1.0*POWER(8.000, 1.000 / 3) AS output;
这会按预期输出 -2.000
。您甚至可以编写更通用的逻辑来解决此问题:
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;
您的计算不起作用的原因是:
(-8)^(1/3) --> an integer, -2
(-8)^(0.33333333333333) --> a complex number
也就是说,浮点值是不精确的,不能表示三分之一之类的东西。并且该值必须 恰好 1/3 才能使该值成为浮点数。
如果您知道该值可以表示为浮点值,那么您可以使用:
sign(-8) * power(abs(-8), 1.0 / 3)
注意:这并不适用于所有情况。琐碎的:
sign(-4) * power(abs(-4), 1.0 / 2)
会return-2,这不是正确答案。
我想使用 POWER 函数计算负数的三次方根(在 SQL Server 2019 中)
SELECT POWER(-8.000, 1.000 / 3)
但我不断收到此错误:
An invalid floating point operation occurred.
它适用于正数。
知道这里出了什么问题吗?
我无法解释为什么您对 POWER
的立方根调用不起作用。但是,假设输入是负数(-8
),输出应该等于正输入的立方根的负数:
SELECT -1.0*POWER(8.000, 1.000 / 3) AS output;
这会按预期输出 -2.000
。您甚至可以编写更通用的逻辑来解决此问题:
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;
您的计算不起作用的原因是:
(-8)^(1/3) --> an integer, -2
(-8)^(0.33333333333333) --> a complex number
也就是说,浮点值是不精确的,不能表示三分之一之类的东西。并且该值必须 恰好 1/3 才能使该值成为浮点数。
如果您知道该值可以表示为浮点值,那么您可以使用:
sign(-8) * power(abs(-8), 1.0 / 3)
注意:这并不适用于所有情况。琐碎的:
sign(-4) * power(abs(-4), 1.0 / 2)
会return-2,这不是正确答案。