\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)}{\left(\frac{\sqrt[3]{{\left(\cos \phi_1\right)}^{3} + {\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right)}^{3}}}{\sqrt[3]{\cos \phi_1 \cdot \cos \phi_1 + \left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot \left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right) - \cos \phi_1\right)}} \cdot \sqrt[3]{\cos \phi_1 + \cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)}\right) \cdot \sqrt[3]{\cos \phi_1 + \cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)}}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r59706 = lambda1;
double r59707 = phi2;
double r59708 = cos(r59707);
double r59709 = lambda2;
double r59710 = r59706 - r59709;
double r59711 = sin(r59710);
double r59712 = r59708 * r59711;
double r59713 = phi1;
double r59714 = cos(r59713);
double r59715 = cos(r59710);
double r59716 = r59708 * r59715;
double r59717 = r59714 + r59716;
double r59718 = atan2(r59712, r59717);
double r59719 = r59706 + r59718;
return r59719;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r59720 = lambda1;
double r59721 = phi2;
double r59722 = cos(r59721);
double r59723 = sin(r59720);
double r59724 = lambda2;
double r59725 = cos(r59724);
double r59726 = r59723 * r59725;
double r59727 = cos(r59720);
double r59728 = sin(r59724);
double r59729 = r59727 * r59728;
double r59730 = r59726 - r59729;
double r59731 = r59722 * r59730;
double r59732 = phi1;
double r59733 = cos(r59732);
double r59734 = 3.0;
double r59735 = pow(r59733, r59734);
double r59736 = r59727 * r59725;
double r59737 = r59723 * r59728;
double r59738 = r59736 + r59737;
double r59739 = r59722 * r59738;
double r59740 = pow(r59739, r59734);
double r59741 = r59735 + r59740;
double r59742 = cbrt(r59741);
double r59743 = r59733 * r59733;
double r59744 = r59739 - r59733;
double r59745 = r59739 * r59744;
double r59746 = r59743 + r59745;
double r59747 = cbrt(r59746);
double r59748 = r59742 / r59747;
double r59749 = r59733 + r59739;
double r59750 = cbrt(r59749);
double r59751 = r59748 * r59750;
double r59752 = r59751 * r59750;
double r59753 = atan2(r59731, r59752);
double r59754 = r59720 + r59753;
return r59754;
}



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-cube-cbrt0.5
rmApplied flip3-+0.5
Applied cbrt-div0.5
Simplified0.5
Final simplification0.5
herbie shell --seed 2020047
(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)))))))