\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 \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \frac{\left(\left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right) - \sin \lambda_1 \cdot \left(\left(\sin \lambda_2 \cdot \sin \lambda_2\right) \cdot \sin \lambda_1\right)\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)}{\cos \lambda_2 \cdot \cos \lambda_1 + \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)}}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r120882 = lambda1;
double r120883 = lambda2;
double r120884 = r120882 - r120883;
double r120885 = sin(r120884);
double r120886 = phi2;
double r120887 = cos(r120886);
double r120888 = r120885 * r120887;
double r120889 = phi1;
double r120890 = cos(r120889);
double r120891 = sin(r120886);
double r120892 = r120890 * r120891;
double r120893 = sin(r120889);
double r120894 = r120893 * r120887;
double r120895 = cos(r120884);
double r120896 = r120894 * r120895;
double r120897 = r120892 - r120896;
double r120898 = atan2(r120888, r120897);
return r120898;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r120899 = lambda1;
double r120900 = sin(r120899);
double r120901 = lambda2;
double r120902 = cos(r120901);
double r120903 = r120900 * r120902;
double r120904 = cos(r120899);
double r120905 = sin(r120901);
double r120906 = r120904 * r120905;
double r120907 = r120903 - r120906;
double r120908 = phi2;
double r120909 = cos(r120908);
double r120910 = r120907 * r120909;
double r120911 = phi1;
double r120912 = cos(r120911);
double r120913 = sin(r120908);
double r120914 = r120912 * r120913;
double r120915 = r120902 * r120904;
double r120916 = r120915 * r120915;
double r120917 = r120905 * r120905;
double r120918 = r120917 * r120900;
double r120919 = r120900 * r120918;
double r120920 = r120916 - r120919;
double r120921 = sin(r120911);
double r120922 = r120921 * r120909;
double r120923 = r120920 * r120922;
double r120924 = -r120901;
double r120925 = sin(r120924);
double r120926 = r120900 * r120925;
double r120927 = r120915 + r120926;
double r120928 = r120923 / r120927;
double r120929 = r120914 - r120928;
double r120930 = atan2(r120910, r120929);
return r120930;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 12.6
rmApplied sin-diff6.6
rmApplied sub-neg6.6
Applied cos-sum0.2
Simplified0.2
rmApplied flip--0.2
Applied associate-*r/0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019325
(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))))))