A reduced difference polynomial f (u, v) = (p(u)−p(v))/(u−v) may be associated with any given univariate polynomial p(t), t ∈ [ 0, 1 ] such that the locus f (u, v) = 0 identifies the pairs of distinct values u and v satisfying p(u) = p(v). The Bernstein coefficients of f (u, v) on [ 0, 1 ] 2 can be determined from those of p(t) through a simple algorithm, and can be restricted to any subdomain of [ 0, 1 ] 2 by standard subdivision methods. By constructing the reduced difference polynomials f (u, v) and g(u, v) associated with the coordinate components of a polynomial curve r(t) = (x(t), y(t)), a quadtree decomposition of [ 0, 1 ] 2 guided by the variation-diminishing property yields a numerically stable scheme for isolating real solutions of the system f (u, v) = g(u, v) = 0, which identify self-intersections of the curve r(t). Through the Kantorovich theorem for guaranteed convergence of Newton-Raphson iterations to a unique solution, the self-intersections can be efficiently computed to machine precision. By generalizing the reduced difference polynomial to encompass products of univariate polynomials, the method can be readily extended to compute the self-intersections of rational curves, and of the rational offsets to Pythagorean-hodograph curves.