\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 - \frac{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left({\left(\cos \lambda_1 \cdot \cos \lambda_2\right)}^{3} + {\left(\sin \lambda_1 \cdot \sin \lambda_2\right)}^{3}\right)}{\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right) - \left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r104801 = lambda1;
double r104802 = lambda2;
double r104803 = r104801 - r104802;
double r104804 = sin(r104803);
double r104805 = phi2;
double r104806 = cos(r104805);
double r104807 = r104804 * r104806;
double r104808 = phi1;
double r104809 = cos(r104808);
double r104810 = sin(r104805);
double r104811 = r104809 * r104810;
double r104812 = sin(r104808);
double r104813 = r104812 * r104806;
double r104814 = cos(r104803);
double r104815 = r104813 * r104814;
double r104816 = r104811 - r104815;
double r104817 = atan2(r104807, r104816);
return r104817;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r104818 = lambda1;
double r104819 = sin(r104818);
double r104820 = lambda2;
double r104821 = cos(r104820);
double r104822 = r104819 * r104821;
double r104823 = cos(r104818);
double r104824 = -r104820;
double r104825 = sin(r104824);
double r104826 = r104823 * r104825;
double r104827 = r104822 + r104826;
double r104828 = phi2;
double r104829 = cos(r104828);
double r104830 = r104827 * r104829;
double r104831 = phi1;
double r104832 = cos(r104831);
double r104833 = sin(r104828);
double r104834 = r104832 * r104833;
double r104835 = sin(r104831);
double r104836 = r104835 * r104829;
double r104837 = r104823 * r104821;
double r104838 = 3.0;
double r104839 = pow(r104837, r104838);
double r104840 = sin(r104820);
double r104841 = r104819 * r104840;
double r104842 = pow(r104841, r104838);
double r104843 = r104839 + r104842;
double r104844 = r104836 * r104843;
double r104845 = r104837 * r104837;
double r104846 = r104841 * r104841;
double r104847 = r104837 * r104841;
double r104848 = r104846 - r104847;
double r104849 = r104845 + r104848;
double r104850 = r104844 / r104849;
double r104851 = r104834 - r104850;
double r104852 = atan2(r104830, r104851);
return r104852;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.6
rmApplied sub-neg13.6
Applied sin-sum6.9
Simplified6.9
rmApplied cos-diff0.2
rmApplied flip3-+0.2
Applied associate-*r/0.2
Final simplification0.2
herbie shell --seed 2020064 +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))))))