private static Decimal DecimalSqrt(Decimal x, Decimal?guess = null) { Decimal valueOrDefault = guess.GetValueOrDefault(x / new Decimal(2)); Decimal num1 = x / valueOrDefault; Decimal num2 = (valueOrDefault + num1) / new Decimal(2); if (num2 == valueOrDefault) { return(num2); } return(Aggregates.DecimalSqrt(x, new Decimal?(num2))); }
public static object StDev(FunctionContext context, IEnumerable data, ExpressionNode node) { IList <Decimal> numList = (IList <Decimal>) new List <Decimal>(); Decimal num1 = new Decimal(0); foreach (object obj in Aggregates.NotNullValue(data, node, (object)context)) { StorageType storageType = DataStorageHelper.GetStorageType(obj.GetType()); if (ExpressionNode.IsNumeric(storageType)) { Decimal num2 = Convert.ToDecimal(obj); num1 += num2; numList.Add(num2); } else { if (storageType != StorageType.String && storageType != StorageType.SqlString) { throw new NotSupportedException("Standard deviation is not supported for type " + storageType.ToString()); } Decimal result; if (Decimal.TryParse(obj.ToString(), out result)) { num1 += result; numList.Add(result); } } } if (numList.Count == 0) { return((object)0); } Decimal num3 = num1 / (Decimal)numList.Count; Decimal num4 = new Decimal(0); foreach (Decimal num2 in (IEnumerable <Decimal>)numList) { Decimal num5 = num2 - num3; Decimal num6 = num5 * num5; num4 += num6; } return((object)Aggregates.DecimalSqrt(num4 / (Decimal)numList.Count, new Decimal?())); }