\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)}{\sqrt[3]{{\left(\mathsf{fma}\left(\cos \lambda_1, \cos \phi_2 \cdot \cos \lambda_2, \cos \phi_1\right)\right)}^{3}} + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r59728 = lambda1;
double r59729 = phi2;
double r59730 = cos(r59729);
double r59731 = lambda2;
double r59732 = r59728 - r59731;
double r59733 = sin(r59732);
double r59734 = r59730 * r59733;
double r59735 = phi1;
double r59736 = cos(r59735);
double r59737 = cos(r59732);
double r59738 = r59730 * r59737;
double r59739 = r59736 + r59738;
double r59740 = atan2(r59734, r59739);
double r59741 = r59728 + r59740;
return r59741;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r59742 = lambda1;
double r59743 = phi2;
double r59744 = cos(r59743);
double r59745 = sin(r59742);
double r59746 = lambda2;
double r59747 = cos(r59746);
double r59748 = r59745 * r59747;
double r59749 = cos(r59742);
double r59750 = -r59746;
double r59751 = sin(r59750);
double r59752 = r59749 * r59751;
double r59753 = r59748 + r59752;
double r59754 = r59744 * r59753;
double r59755 = r59744 * r59747;
double r59756 = phi1;
double r59757 = cos(r59756);
double r59758 = fma(r59749, r59755, r59757);
double r59759 = 3.0;
double r59760 = pow(r59758, r59759);
double r59761 = cbrt(r59760);
double r59762 = sin(r59746);
double r59763 = r59745 * r59762;
double r59764 = r59763 * r59744;
double r59765 = r59761 + r59764;
double r59766 = atan2(r59754, r59765);
double r59767 = r59742 + r59766;
return r59767;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 0.9
rmApplied sub-neg0.9
Applied sin-sum0.8
Simplified0.8
rmApplied cos-diff0.2
Applied distribute-rgt-in0.2
Applied associate-+r+0.2
Simplified0.2
rmApplied add-log-exp0.3
rmApplied add-cbrt-cube0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2020003 +o rules:numerics
(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)))))))