Преобразование функции финансовой продолжительности в 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;
}