\lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_1 + \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)}\lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right)}{\frac{{\left(\cos \phi_1\right)}^{3} + {\left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2\right)}^{3}}{\left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2\right) \cdot \frac{{\left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2\right)}^{2} - {\left(\cos \phi_1\right)}^{2}}{\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2 + \cos \phi_1} + \cos \phi_1 \cdot \cos \phi_1} + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r51597 = lambda1;
double r51598 = phi2;
double r51599 = cos(r51598);
double r51600 = lambda2;
double r51601 = r51597 - r51600;
double r51602 = sin(r51601);
double r51603 = r51599 * r51602;
double r51604 = phi1;
double r51605 = cos(r51604);
double r51606 = cos(r51601);
double r51607 = r51599 * r51606;
double r51608 = r51605 + r51607;
double r51609 = atan2(r51603, r51608);
double r51610 = r51597 + r51609;
return r51610;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r51611 = lambda1;
double r51612 = phi2;
double r51613 = cos(r51612);
double r51614 = sin(r51611);
double r51615 = lambda2;
double r51616 = cos(r51615);
double r51617 = r51614 * r51616;
double r51618 = cos(r51611);
double r51619 = sin(r51615);
double r51620 = r51618 * r51619;
double r51621 = r51617 - r51620;
double r51622 = r51613 * r51621;
double r51623 = phi1;
double r51624 = cos(r51623);
double r51625 = 3.0;
double r51626 = pow(r51624, r51625);
double r51627 = r51618 * r51616;
double r51628 = r51627 * r51613;
double r51629 = pow(r51628, r51625);
double r51630 = r51626 + r51629;
double r51631 = 2.0;
double r51632 = pow(r51628, r51631);
double r51633 = pow(r51624, r51631);
double r51634 = r51632 - r51633;
double r51635 = r51628 + r51624;
double r51636 = r51634 / r51635;
double r51637 = r51628 * r51636;
double r51638 = r51624 * r51624;
double r51639 = r51637 + r51638;
double r51640 = r51630 / r51639;
double r51641 = r51614 * r51619;
double r51642 = r51641 * r51613;
double r51643 = r51640 + r51642;
double r51644 = atan2(r51622, r51643);
double r51645 = r51611 + r51644;
return r51645;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 0.8
rmApplied cos-diff0.8
Applied distribute-rgt-in0.8
Applied associate-+r+0.8
rmApplied sin-diff0.2
rmApplied flip3-+0.3
Simplified0.3
rmApplied flip--0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2020049
(FPCore (lambda1 lambda2 phi1 phi2)
:name "Midpoint on a great circle"
:precision binary64
(+ lambda1 (atan2 (* (cos phi2) (sin (- lambda1 lambda2))) (+ (cos phi1) (* (cos phi2) (cos (- lambda1 lambda2)))))))