mirror of
https://github.com/UglyToad/PdfPig.git
synced 2025-10-15 19:54:52 +08:00
add AlmostEqualsToZero() and AlmostEquals().
This commit is contained in:
@@ -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>
|
/// <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)
|
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 sorted = array.GroupBy(v => v).Select(v => (v.Count(), v.Key)).OrderByDescending(g => g.Item1);
|
||||||
var mode = sorted.First();
|
var mode = sorted.First();
|
||||||
if (sorted.Count() > 1 && mode.Item1 == sorted.ElementAt(1).Item1) return float.NaN;
|
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>
|
/// <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)
|
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 sorted = array.GroupBy(v => v).Select(v => (v.Count(), v.Key)).OrderByDescending(g => g.Item1);
|
||||||
var mode = sorted.First();
|
var mode = sorted.First();
|
||||||
if (sorted.Count() > 1 && mode.Item1 == sorted.ElementAt(1).Item1) return double.NaN;
|
if (sorted.Count() > 1 && mode.Item1 == sorted.ElementAt(1).Item1) return double.NaN;
|
||||||
return mode.Key;
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user