\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)}{\log \left(e^{\sqrt[3]{{\left(\cos \phi_1 + \cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right)}^{3}}}\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r51714 = lambda1;
double r51715 = phi2;
double r51716 = cos(r51715);
double r51717 = lambda2;
double r51718 = r51714 - r51717;
double r51719 = sin(r51718);
double r51720 = r51716 * r51719;
double r51721 = phi1;
double r51722 = cos(r51721);
double r51723 = cos(r51718);
double r51724 = r51716 * r51723;
double r51725 = r51722 + r51724;
double r51726 = atan2(r51720, r51725);
double r51727 = r51714 + r51726;
return r51727;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r51728 = lambda1;
double r51729 = phi2;
double r51730 = cos(r51729);
double r51731 = sin(r51728);
double r51732 = lambda2;
double r51733 = cos(r51732);
double r51734 = r51731 * r51733;
double r51735 = cos(r51728);
double r51736 = sin(r51732);
double r51737 = r51735 * r51736;
double r51738 = r51734 - r51737;
double r51739 = r51730 * r51738;
double r51740 = phi1;
double r51741 = cos(r51740);
double r51742 = r51735 * r51733;
double r51743 = r51731 * r51736;
double r51744 = r51742 + r51743;
double r51745 = r51730 * r51744;
double r51746 = r51741 + r51745;
double r51747 = 3.0;
double r51748 = pow(r51746, r51747);
double r51749 = cbrt(r51748);
double r51750 = exp(r51749);
double r51751 = log(r51750);
double r51752 = atan2(r51739, r51751);
double r51753 = r51728 + r51752;
return r51753;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 0.9
rmApplied sin-diff0.8
rmApplied cos-diff0.2
rmApplied add-log-exp0.3
Applied add-log-exp0.3
Applied sum-log0.3
Simplified0.3
rmApplied add-cbrt-cube0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2020025
(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)))))))