/// <summary> /// Creates a new Gamma which the ratio of two other Gammas /// </summary> /// <param name="numerator">numerator Gamma</param> /// <param name="denominator">denominator Gamma</param> /// <returns>Result</returns> public static Gamma operator /(Gamma numerator, Gamma denominator) { Gamma result = new Gamma(); result.SetToRatio(numerator, denominator); return(result); }
/// <summary> /// Set this equal to numerator/denominator /// </summary> /// <param name="numerator"></param> /// <param name="denominator"></param> /// <param name="forceProper"></param> public void SetToRatio(TruncatedGamma numerator, TruncatedGamma denominator, bool forceProper = false) { if (numerator.IsPointMass) { if (denominator.IsPointMass) { if (numerator.Point.Equals(denominator.Point)) { SetToUniform(); } else { throw new DivideByZeroException(); } } else { if (denominator.LowerBound < numerator.Point && numerator.Point < denominator.UpperBound) { Point = numerator.Point; } else { throw new DivideByZeroException(); } } } else if (denominator.IsPointMass) { throw new DivideByZeroException(); } else { if (numerator.LowerBound >= denominator.LowerBound && numerator.UpperBound <= denominator.UpperBound) { LowerBound = numerator.LowerBound; UpperBound = numerator.UpperBound; Gamma.SetToRatio(numerator.Gamma, denominator.Gamma, forceProper); } else { throw new DivideByZeroException(); } } }