\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 \sqrt[3]{{\left(\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\right)}^{3}} + \cos \phi_1 \cdot \cos \phi_1}}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r55744 = lambda1;
double r55745 = phi2;
double r55746 = cos(r55745);
double r55747 = lambda2;
double r55748 = r55744 - r55747;
double r55749 = sin(r55748);
double r55750 = r55746 * r55749;
double r55751 = phi1;
double r55752 = cos(r55751);
double r55753 = cos(r55748);
double r55754 = r55746 * r55753;
double r55755 = r55752 + r55754;
double r55756 = atan2(r55750, r55755);
double r55757 = r55744 + r55756;
return r55757;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r55758 = lambda1;
double r55759 = phi2;
double r55760 = cos(r55759);
double r55761 = sin(r55758);
double r55762 = lambda2;
double r55763 = cos(r55762);
double r55764 = r55761 * r55763;
double r55765 = cos(r55758);
double r55766 = -r55762;
double r55767 = sin(r55766);
double r55768 = r55765 * r55767;
double r55769 = r55764 + r55768;
double r55770 = r55760 * r55769;
double r55771 = phi1;
double r55772 = cos(r55771);
double r55773 = 3.0;
double r55774 = pow(r55772, r55773);
double r55775 = r55765 * r55763;
double r55776 = r55761 * r55767;
double r55777 = r55775 - r55776;
double r55778 = r55760 * r55777;
double r55779 = pow(r55778, r55773);
double r55780 = r55774 + r55779;
double r55781 = r55778 - r55772;
double r55782 = pow(r55781, r55773);
double r55783 = cbrt(r55782);
double r55784 = r55778 * r55783;
double r55785 = r55772 * r55772;
double r55786 = r55784 + r55785;
double r55787 = r55780 / r55786;
double r55788 = atan2(r55770, r55787);
double r55789 = r55758 + r55788;
return r55789;
}



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.9
Simplified0.9
rmApplied sub-neg0.9
Applied cos-sum0.2
Simplified0.2
rmApplied flip3-+0.3
Simplified0.3
rmApplied add-cbrt-cube0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2020034
(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)))))))