この階乗を ErlangC 関数で使用しようとしています。しかし、私のエージェントの数は 300 に達する可能性があります。これにより、かなりの数を取得できます。たとえば。_ 私の質問は、これらの数値をどのように保存して計算するのですか? ネイティブ SQL に方法はありますか。私は CLR に行って外部関数を作成できることを知っています。しかし、簡単にするために、このネイティブ SQL を保持したいと思います。本当にここから 9 と 10 に到達しようとしています。しかし、私がこれを解決するとき、私はそれを成し遂げます。ご提供いただけるご支援をよろしくお願いいたします。
ALTER FUNCTION [dbo].[Factorial] ( @iNumber int )
RETURNS float
AS
BEGIN
Declare @i float
IF @iNumber <= 1
SET @i = 1
ELSE
SET @i = @iNumber
WHILE @iNumber > 1
BEGIN
SET @i = @i * (@iNumber - 1)
Set @iNumber = @iNumber -1
END
RETURN (@i)
END
ErlangC コードは次のとおりです。
ALTER FUNCTION [AMS].[ErlangC]
(
-- Add the parameters for the function here
@m float -- Number of Agents
,@u float -- Traffic floatensity
)
RETURNS float
AS
BEGIN
--Source http://www.mitan.co.uk/erlang/elgcmath.htm Number 6
-- Return Variable
DECLARE @Prob Float -- Probability of Call not being answered immediately and having to wait.
-- Variables
Declare @Numerator Float -- Top of Equation
Declare @Denominator Float -- Bottom of Equation
Declare @Summation float -- Summation part of Denominator
Declare @k float -- increment for summation
--Calculate Numerator
SET @Numerator = Power(@u,@m)/dbo.Factorial(@m)
-- Start Summation with k starting at 0.
SET @k = 0
SET @Summation = 0
While @k < @m-1
Begin
SET @Summation = @Summation + Power(@u,@k)/dbo.Factorial(@k)
SET @k = @k +1
End
--Calculate denominator
SET @Denominator = Power(@u,@m)/dbo.Factorial(@m) + (1-@u/@m)*@Summation
SET @Prob = @Numerator/@Denominator
-- Return the result of the function
RETURN @Prob
END