Implementation of Newton's method of finding root of a function
Math.Abs(y) &gt;= EPSILON


I think this condition is only satisfied for roots around zero on the x-axis. Maybe you confuse yourself by naming the next x as y? A better name would be x1.

The actual continue condition should be Math.Abs(x - x1) &gt;= EPSILON and you then can skip the test if (x == y) break; 



Your rather large value of EPSILON may result in imprecise roots now and then.



You can clean up the main algorithm to something like:

public static double Newton(MyFunction func, double init)
{
  double x;
  double x1 = init;

  do
  {
    x = x1;
    x1 = NextNewton(func, x);

    Console.WriteLine("Root = {0}", x1);
  } while (Math.Abs(x - x1) &gt;= EPSILON);

  return x1;
}