Мне нужно рассчитать IRR, и для этого нашел формулу.
Он работает для большинства наших значений, однако выдает ошибку «Произошла недопустимая операция с плавающей запятой». в следующем примере:
DECLARE @CashFlow TABLE (Amount DECIMAL(19,9), InvoiceDate DATETIME);
INSERT INTO @CashFlow (Amount, InvoiceDate)
VALUES
(-500000, '2019-12-01'),
(1000, '2020-01-01'),
(0, '2020-02-01');
DECLARE @X DECIMAL(38,9) = 0.0,
@X0 DECIMAL(19,9) = 0.1,
@f DECIMAL(19,9) = 0.0,
@fbar DECIMAL(19,9) = 0.0,
@i TINYINT = 0,
@found TINYINT = 0,
@Rate DECIMAL(19,9) = 0.1
IF @Rate IS NULL
SET @Rate = 0.1
SET @X0 = @Rate
WHILE @i < 100
BEGIN
SELECT @f = 0.0,
@fbar = 0.0
SELECT @f = (@f + Amount * POWER(1 + @X0, (-theDelta / 365.0E))),
@fbar = (@fbar - theDelta / 365.0E * Amount * POWER(1 + @X0, (-theDelta / 365.0E - 1)))
FROM (
SELECT Amount,
DATEDIFF(DAY,MIN(InvoiceDate) OVER(),InvoiceDate) AS theDelta
FROM @CashFlow
) AS d
SET @X = @X0 - @f / @fbar
If ABS(@X - @X0) < 0.00000001
BEGIN
SET @found = 1
BREAK;
END
SET @X0 = @X
SET @i += 1
END
If @found = 1
SELECT @X AS IRR
Кто-нибудь, кто может помочь?
Я использовал те же значения для расчета IRR в Excel, и это возвращает значение -99,77%.