private static double CalculateFibonacciRisk( IEnumerable <ActivityModel> 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( IEnumerable <ActivityModel> activities, ActivitySeverityLookup activitySeverityLookup) { if (activities == null) { throw new ArgumentNullException(nameof(activities)); } if (activitySeverityLookup == null) { throw new ArgumentNullException(nameof(activitySeverityLookup)); } double numerator = 1.0; foreach (ActivityModel activity in activities) { numerator *= activitySeverityLookup.FindSlackFibonacciWeight(activity.TotalSlack); } numerator = Math.Pow(numerator, 1.0 / activities.Count()); double denominator = activitySeverityLookup.CriticalFibonacciWeight(); return(numerator / denominator); }