private LogSum ( double lna, double lnc ) : double | ||
lna | double | |
lnc | double | |
return | double |
public static double LogSum(double lna, double lnc)
{
if (lna == Double.NegativeInfinity)
return lnc;
if (lnc == Double.NegativeInfinity)
return lna;
if (lna > lnc)
return lna + Special.Log1p(Math.Exp(lnc - lna));
return lnc + Special.Log1p(Math.Exp(lna - lnc));
}
Special::LogSum ( float lna, float lnc ) : double |
public static double LogSumExp(this double[] array) { double sum = Double.NegativeInfinity; for (int i = 0; i < array.Length; i++) { sum = Special.LogSum(array[i], sum); } return(sum); }