\tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}\tan^{-1}_* \frac{\left(\sin \lambda_1 \cdot \cos \lambda_2 + \cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\sqrt[3]{\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)} \cdot \sqrt[3]{\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)}\right) \cdot \sqrt[3]{\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)}\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r104795 = lambda1;
double r104796 = lambda2;
double r104797 = r104795 - r104796;
double r104798 = sin(r104797);
double r104799 = phi2;
double r104800 = cos(r104799);
double r104801 = r104798 * r104800;
double r104802 = phi1;
double r104803 = cos(r104802);
double r104804 = sin(r104799);
double r104805 = r104803 * r104804;
double r104806 = sin(r104802);
double r104807 = r104806 * r104800;
double r104808 = cos(r104797);
double r104809 = r104807 * r104808;
double r104810 = r104805 - r104809;
double r104811 = atan2(r104801, r104810);
return r104811;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r104812 = lambda1;
double r104813 = sin(r104812);
double r104814 = lambda2;
double r104815 = cos(r104814);
double r104816 = r104813 * r104815;
double r104817 = cos(r104812);
double r104818 = -r104814;
double r104819 = sin(r104818);
double r104820 = r104817 * r104819;
double r104821 = r104816 + r104820;
double r104822 = phi2;
double r104823 = cos(r104822);
double r104824 = r104821 * r104823;
double r104825 = phi1;
double r104826 = cos(r104825);
double r104827 = sin(r104822);
double r104828 = r104826 * r104827;
double r104829 = sin(r104825);
double r104830 = r104829 * r104823;
double r104831 = r104817 * r104815;
double r104832 = r104830 * r104831;
double r104833 = sin(r104814);
double r104834 = r104813 * r104833;
double r104835 = r104834 * r104830;
double r104836 = cbrt(r104835);
double r104837 = r104836 * r104836;
double r104838 = r104837 * r104836;
double r104839 = r104832 + r104838;
double r104840 = r104828 - r104839;
double r104841 = atan2(r104824, r104840);
return r104841;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 12.9
rmApplied sub-neg12.9
Applied sin-sum6.7
Simplified6.7
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
Simplified0.2
rmApplied add-cube-cbrt0.2
Final simplification0.2
herbie shell --seed 2019351 +o rules:numerics
(FPCore (lambda1 lambda2 phi1 phi2)
:name "Bearing on a great circle"
:precision binary64
(atan2 (* (sin (- lambda1 lambda2)) (cos phi2)) (- (* (cos phi1) (sin phi2)) (* (* (sin phi1) (cos phi2)) (cos (- lambda1 lambda2))))))