private static double CalculateFibonacciRisk(IList <IActivity <int> > activities, ActivitySeverityLookup activitySeverityLookup) { if (activities == null) { throw new ArgumentNullException(nameof(activities)); } if (activitySeverityLookup == null) { throw new ArgumentNullException(nameof(activitySeverityLookup)); } double numerator = activities.Sum(activity => activitySeverityLookup.FindSlackFibonacciWeight(activity.TotalSlack)); double denominator = activitySeverityLookup.CriticalFibonacciWeight() * activities.Count; return(numerator / denominator); }
private static double CalculateGeometricFibonacciRisk(IList <IActivity <int> > activities, ActivitySeverityLookup activitySeverityLookup) { if (activities == null) { throw new ArgumentNullException(nameof(activities)); } if (activitySeverityLookup == null) { throw new ArgumentNullException(nameof(activitySeverityLookup)); } double numerator = 1.0; foreach (Activity <int> activity in activities) { numerator *= activitySeverityLookup.FindSlackFibonacciWeight(activity.TotalSlack); } numerator = Math.Pow(numerator, 1.0 / activities.Count); double denominator = activitySeverityLookup.CriticalFibonacciWeight(); return(numerator / denominator); }