Skip to content

Instantly share code, notes, and snippets.

@JamesNK
Last active June 9, 2016 23:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JamesNK/afb3f15771d6f09b2da01a157cff32ea to your computer and use it in GitHub Desktop.
Save JamesNK/afb3f15771d6f09b2da01a157cff32ea to your computer and use it in GitHub Desktop.
IsMultiple
[Test]
public void IsMultipleTests()
{
// true
Console.WriteLine(IsMultiple(0.0075, 0.0001));
Console.WriteLine(IsMultiple(500.4, 0.001));
Console.WriteLine(IsMultiple(500.4, 0.0001));
Console.WriteLine(IsMultiple(500.4, 0.00001));
Console.WriteLine(IsMultiple(500.4, 0.000001));
Console.WriteLine(IsMultiple(500.4, 0.0000001));
Console.WriteLine(IsMultiple(500.4, 0.00000001));
Console.WriteLine(IsMultiple(500.4, 0.000000001));
Console.WriteLine(IsMultiple(500.4, 0.0000000001));
Console.WriteLine(IsMultiple(500.4, 0.00000000001));
// false
Console.WriteLine(IsMultiple(500.4, 0.0000007));
Console.WriteLine(IsMultiple(500.4, 0.0021));
Console.WriteLine(IsMultiple(0.00751, 0.0001));
}
private static bool IsMultiple(double value, double multipleOf)
{
const double epsilon = 2.2204460492503131e-016;
const double tolerance = epsilon*300; // this tolerance seems too big
double remainder = value%multipleOf;
double absRemainder = Math.Abs(remainder);
if (absRemainder < tolerance)
{
return true;
}
if (Math.Abs(multipleOf) - absRemainder < tolerance)
{
return true;
}
return false;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment