\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)}{\left(\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)} \cdot \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)}}\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 r56766 = lambda1;
double r56767 = phi2;
double r56768 = cos(r56767);
double r56769 = lambda2;
double r56770 = r56766 - r56769;
double r56771 = sin(r56770);
double r56772 = r56768 * r56771;
double r56773 = phi1;
double r56774 = cos(r56773);
double r56775 = cos(r56770);
double r56776 = r56768 * r56775;
double r56777 = r56774 + r56776;
double r56778 = atan2(r56772, r56777);
double r56779 = r56766 + r56778;
return r56779;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r56780 = lambda1;
double r56781 = phi2;
double r56782 = cos(r56781);
double r56783 = sin(r56780);
double r56784 = lambda2;
double r56785 = cos(r56784);
double r56786 = r56783 * r56785;
double r56787 = cos(r56780);
double r56788 = -r56784;
double r56789 = sin(r56788);
double r56790 = r56787 * r56789;
double r56791 = r56786 + r56790;
double r56792 = r56782 * r56791;
double r56793 = phi1;
double r56794 = cos(r56793);
double r56795 = r56787 * r56785;
double r56796 = sin(r56784);
double r56797 = r56783 * r56796;
double r56798 = r56795 + r56797;
double r56799 = r56782 * r56798;
double r56800 = r56794 + r56799;
double r56801 = cbrt(r56800);
double r56802 = 3.0;
double r56803 = pow(r56794, r56802);
double r56804 = pow(r56799, r56802);
double r56805 = r56803 + r56804;
double r56806 = cbrt(r56805);
double r56807 = r56794 * r56794;
double r56808 = r56799 - r56794;
double r56809 = r56799 * r56808;
double r56810 = r56807 + r56809;
double r56811 = cbrt(r56810);
double r56812 = r56806 / r56811;
double r56813 = r56801 * r56812;
double r56814 = r56813 * r56801;
double r56815 = atan2(r56792, r56814);
double r56816 = r56780 + r56815;
return r56816;
}



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 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)))))))