0
我只是写了一个SQL函数如下SQL UDF:浮点错误
Create Function LAeq(@Frequency Decimal(18,2), @Sound Decimal(18,2))
RETURNS DECIMAL(18,2)
AS
BEGIN
declare @T1 Decimal (28, 10)
DECLARE @T2 Decimal (28, 10)
DECLARE @T3 Decimal (28, 10)
DECLARE @T4 Decimal (28, 10)
DECLARE @T5 Decimal (28, 10)
DECLARE @T6 Decimal (28, 10)
DECLARE @T7 Decimal (28, 10)
SET @T1 = POWER(12200.0,2) * POWER(@Frequency, 4)
SET @T2 = POWER (@Frequency, 2) + POWER(20.6,2)
SET @T3 = POWER (@Frequency, 2) + POWER(107.7,2)
SET @T4 = POWER (@Frequency, 2) + POWER(737.9,2)
SET @T5 = POWER (@Frequency, 2) + POWER(12200.0,2)
SET @T6 = SQRT(@T3 *@T4) * @T5 * @T2
SET @T7 = @T1/ @T6
SET @T7 = @Sound + (2.0 + (20.0 * LOG10(@T7)))
RETURN @T7
END
如果我通过价值0.8此功能,26然而,当我有一样的值20000,80我的函数应该失败频率最大为20K,声音可以小于100最大值。我尝试将T1,T7从十进制(28,10)更改为30,15或18,2,但对我来说没有任何作用。我不想定义数据类型的限制,当我写了一个SQL语句相同的公式
Select 26 + (2 + (20 * LOG10((POWER(12200,2) * POWER(0.8, 4))/ (SQRT((POWER (0.8, 2) + POWER(107.7,2)) * (POWER (0.8, 2) + POWER(737.9,2))) * (POWER (0.8, 2) + POWER(12200,2)) * (POWER (0.8, 2) + POWER(20.6,2))))))
OR
Select 80 + (2 + (20 * LOG10((POWER(12200,2) * POWER(20000.00, 4))/ (SQRT((POWER (20000.00, 2) + POWER(107.7,2)) * (POWER (20000.00, 2) + POWER(737.9,2))) * (POWER (20000.00, 2) + POWER(12200,2)) * (POWER (20000.00, 2) + POWER(20.6,2))))))
它非常细,比我的功能更加准确。我可以在功能上消除数据类型的需要吗?如果不能如何确保最大精度?
谢谢。
尽管它使我的极端情况起作用,但与直接SELECT方法相比,它仍然不是很准确。但我认为我现在可以忍受它。 –