class MullerNewtonSolver implements IRootsSolver {

    @VisibleForTesting
    static Complex computeA2(Complex q2, Complex f2, Complex f0, Complex f1) {
        double tmp;
        double re0, re1, re2;
        double im0, im1, im2;
        /* { q2 } */
        re0 = q2.getRe();
        im0 = q2.getIm();
        /* { f2 } */
        re1 = f2.getRe();
        im1 = f2.getIm();
        /* { q2 f0 * } */
        re2 = q2.getRe() * f0.getRe() - q2.getIm() * f0.getIm();
        im2 = q2.getRe() * f0.getIm() + q2.getIm() * f0.getRe();
        /* { + } */
        re1 += re2;
        im1 += im2;
        /* { 1 q2 + } */
        re2 = 1 + q2.getRe();
        im2 = q2.getIm();
        /* { f1 * } */
        tmp = re2 * f1.getRe() - im2 * f1.getIm();
        im2 = re2 * f1.getIm() + im2 * f1.getRe();
        re2 = tmp;
        /* { - } */
        re1 -= re2;
        im1 -= im2;
        /* { * } */
        tmp = re0 * re1 - im0 * im1;
        im0 = re0 * im1 + im0 * re1;
        re0 = tmp;
        /* .build() */
        return Complex.cart(re0, im0);
    }

    public  MullerNewtonSolver();

}