add AlmostEqualsToZero() and AlmostEquals().

This commit is contained in:
BobLd
2020-05-23 19:13:01 +01:00
committed by Eliot Jones
parent 08300f6a3a
commit 78da925263

View File

@@ -15,7 +15,7 @@
/// <returns>The mode of the sequence. Returns <see cref="float.NaN"/> if the sequence has no mode or if it is not unique.</returns>
public static float Mode(this IEnumerable<float> array)
{
if (array == null || array.Count() == 0) return float.NaN;
if (array == null || !array.Any()) return float.NaN;
var sorted = array.GroupBy(v => v).Select(v => (v.Count(), v.Key)).OrderByDescending(g => g.Item1);
var mode = sorted.First();
if (sorted.Count() > 1 && mode.Item1 == sorted.ElementAt(1).Item1) return float.NaN;
@@ -29,11 +29,32 @@
/// <returns>The mode of the sequence. Returns <see cref="double.NaN"/> if the sequence has no mode or if it is not unique.</returns>
public static double Mode(this IEnumerable<double> array)
{
if (array == null || array.Count() == 0) return double.NaN;
if (array == null || !array.Any()) return double.NaN;
var sorted = array.GroupBy(v => v).Select(v => (v.Count(), v.Key)).OrderByDescending(g => g.Item1);
var mode = sorted.First();
if (sorted.Count() > 1 && mode.Item1 == sorted.ElementAt(1).Item1) return double.NaN;
return mode.Key;
}
/// <summary>
/// Test for almost equality to 0.
/// </summary>
/// <param name="number"></param>
/// <param name="epsilon"></param>
public static bool AlmostEqualsToZero(this double number, double epsilon = 1e-5)
{
return (number > -epsilon) && (number < epsilon);
}
/// <summary>
/// Test for almost equality.
/// </summary>
/// <param name="number"></param>
/// <param name="other"></param>
/// <param name="epsilon"></param>
public static bool AlmostEquals(this double number, double other, double epsilon = 1e-5)
{
return AlmostEqualsToZero(number - other, epsilon);
}
}
}