General Complex Polynomial Root Solver and Its Further Optimization for Binary Microlenses
We present a new algorithm to solve polynomial equations, and publish its code, which is 1.6–3 times faster than the ZROOTS subroutine that is commercially available from Numerical Recipes, depending on application. The largest improvement, when compared to naive solvers, comes from a fail-safe procedure that permits us to skip the majority of the calculations in the great majority of cases, without risking catastrophic failure in the few cases that these are actually required. Second, we identify a discriminant that enables a rational choice between Laguerre’s Method and Newton’s Method (or a new intermediate method) on a case-by-case basis. We briefly review the history of root solving and demonstrate that “Newton’s Method” was discovered neither by Newton (1671) nor by Raphson (1690), but only by Simpson (1740). Some of the arguments leading to this conclusion were first given by the British historian of science Nick Kollerstrom in 1992, but these do not appear to have penetrated the astronomical community. Finally, we argue that Numerical Recipes should voluntarily surrender its copyright protection for non-profit applications, despite the fact that, in this particular case, such protection was the major stimulant for developing our improved algorithm.