\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 \left(-\lambda_2\right)\right)}{\frac{{\left(\cos \phi_1\right)}^{3} + {\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)}^{3}}{\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right) \cdot \frac{{\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)}^{2} - {\left(\cos \phi_1\right)}^{2}}{\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) + \cos \phi_1} + \cos \phi_1 \cdot \cos \phi_1}}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r56732 = lambda1;
double r56733 = phi2;
double r56734 = cos(r56733);
double r56735 = lambda2;
double r56736 = r56732 - r56735;
double r56737 = sin(r56736);
double r56738 = r56734 * r56737;
double r56739 = phi1;
double r56740 = cos(r56739);
double r56741 = cos(r56736);
double r56742 = r56734 * r56741;
double r56743 = r56740 + r56742;
double r56744 = atan2(r56738, r56743);
double r56745 = r56732 + r56744;
return r56745;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r56746 = lambda1;
double r56747 = phi2;
double r56748 = cos(r56747);
double r56749 = sin(r56746);
double r56750 = lambda2;
double r56751 = cos(r56750);
double r56752 = r56749 * r56751;
double r56753 = cos(r56746);
double r56754 = -r56750;
double r56755 = sin(r56754);
double r56756 = r56753 * r56755;
double r56757 = r56752 + r56756;
double r56758 = r56748 * r56757;
double r56759 = phi1;
double r56760 = cos(r56759);
double r56761 = 3.0;
double r56762 = pow(r56760, r56761);
double r56763 = r56753 * r56751;
double r56764 = r56749 * r56755;
double r56765 = r56763 - r56764;
double r56766 = r56748 * r56765;
double r56767 = pow(r56766, r56761);
double r56768 = r56762 + r56767;
double r56769 = 2.0;
double r56770 = pow(r56766, r56769);
double r56771 = pow(r56760, r56769);
double r56772 = r56770 - r56771;
double r56773 = r56766 + r56760;
double r56774 = r56772 / r56773;
double r56775 = r56766 * r56774;
double r56776 = r56760 * r56760;
double r56777 = r56775 + r56776;
double r56778 = r56768 / r56777;
double r56779 = atan2(r56758, r56778);
double r56780 = r56746 + r56779;
return r56780;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 0.9
rmApplied sub-neg0.9
Applied sin-sum0.8
Simplified0.8
rmApplied sub-neg0.8
Applied cos-sum0.2
Simplified0.2
rmApplied flip3-+0.3
Simplified0.3
rmApplied flip--0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2020036
(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)))))))