private static bool IsMultipleOf(double numerator, double denominator)
if (denominator <= 0 || numerator <= 0)
var res = numerator / denominator;
return Math.Abs(res - Math.Round(res)) < 1e-9;
public static double modulo( double a, double b, double num_sig_digits = 14 )
double int_closest_to_ratio
throw new Exception( "function modulo called with a or b == NaN or b == 0" );
if ( b == Math.Floor( b ) )
int_closest_to_ratio = Math.Round( a / b );
abs_val_of_residue = Math.Abs( a - int_closest_to_ratio * b );
if ( abs_val_of_residue < Math.Pow( 10.0, -num_sig_digits ) )
return abs_val_of_residue * Math.Sign( a );
public static void Main()
Console.WriteLine(IsMultipleOf(0.03,0.01000001));
Console.WriteLine(IsMultipleOf(0.03,0.0100000000000001));
Console.WriteLine(modulo(0.03,0.01000001));
Console.WriteLine(modulo(0.03,0.0100000000000001));
Console.WriteLine(modulo(0.03,0.01));