Source: http://helios.mi.parisdescartes.fr/~eprovenz/include/Poly.pdf