Esempio n. 1
0
 /// <summary>
 /// Computes log(exp(x) - exp(y)) to high accuracy.
 /// </summary>
 /// <param name="x">Any real number from -Inf to Inf, or NaN.  Must be greater or equal to y.</param>
 /// <param name="y">Any real number from -Inf to Inf, or NaN.  Must be less or equal to x.</param>
 /// <returns></returns>
 /// <remarks>This function provides higher accuracy than a direct evaluation of <c>log(exp(x)-exp(y))</c>.</remarks>
 public static double LogDifferenceOfExp(double x, double y)
 {
     if (x == y)
     {
         return(Double.NegativeInfinity);
     }
     if (Double.IsNegativeInfinity(y))
     {
         return(x);
     }
     return(x + MMath.Log1MinusExp(y - x));
 }
Esempio n. 2
0
 /// <summary>
 /// Computes exp(x)-exp(y) to high accuracy.
 /// </summary>
 /// <param name="x">Any real number</param>
 /// <param name="y">Any real number</param>
 /// <returns>exp(x)-exp(y)</returns>
 public static double DifferenceOfExp(double x, double y)
 {
     if (x == y)
     {
         return(0.0);
     }
     else if (x > y)
     {
         return(Math.Exp(x + MMath.Log1MinusExp(y - x)));
     }
     else
     {
         return(-DifferenceOfExp(y, x));
     }
 }