Преобразование функции финансовой продолжительности в F# в C#

Мне было поручено перенести некоторые конкретные финансовые функции, написанные на F#, на C#. Используемая мной библиотека F# превосходна ( http://archive.msdn.microsoft.com/FinancialFunctions), но экологические соображения не позволяют развернуть сборку CLR в нашем SQL Server с неограниченными разрешениями, необходимыми для развертывания

Конкретная функция, с которой у меня возникла проблема, - это формула MacAuley Duration. Я новичок в F# и был бы признателен, если бы эксперт F# объяснил фрагмент кода ниже:

    let aggrFunction acc index =
        let x5 = float index - 1. + x1
        let x6 = pow x3 x5
        ( x6 <> 0.) |> elseThrow "x6 must be different from 0)"
        let x7 = (100. * coupon / frequency) / x6
        let a, b = acc
        a + x7 * x5, b + x7
    let term2, term4 = aggrBetween 1 (int n) aggrFunction (0., 0.)

Моя лучшая попытка C# выглядит таким образом и возвращает неправильный результат (я запускаю две стороны рядом). Кстати частота Enum, следовательно, приведение

    double term2 = 0;
    double term4 = 0;
    for (int i = 0; i <= n ; i++)
    {
        var x5 = i - 1 + x1;
        var x6 = Math.Pow(x3, x5);
        if (x6 == 0)
        {
            throw new Exception("x6 must be different from 0)");
        }
        var x7 = (100D * coupon/(int) frequency) / x6;
        term2 += (x7*x5);
        term4 += x7;
    }

0 ответов

Другие вопросы по тегам