\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 r150915 = lambda1;
double r150916 = lambda2;
double r150917 = r150915 - r150916;
double r150918 = sin(r150917);
double r150919 = phi2;
double r150920 = cos(r150919);
double r150921 = r150918 * r150920;
double r150922 = phi1;
double r150923 = cos(r150922);
double r150924 = sin(r150919);
double r150925 = r150923 * r150924;
double r150926 = sin(r150922);
double r150927 = r150926 * r150920;
double r150928 = cos(r150917);
double r150929 = r150927 * r150928;
double r150930 = r150925 - r150929;
double r150931 = atan2(r150921, r150930);
return r150931;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r150932 = lambda1;
double r150933 = sin(r150932);
double r150934 = lambda2;
double r150935 = cos(r150934);
double r150936 = r150933 * r150935;
double r150937 = cos(r150932);
double r150938 = -r150934;
double r150939 = sin(r150938);
double r150940 = r150937 * r150939;
double r150941 = r150936 + r150940;
double r150942 = phi2;
double r150943 = cos(r150942);
double r150944 = r150941 * r150943;
double r150945 = phi1;
double r150946 = cos(r150945);
double r150947 = sin(r150942);
double r150948 = r150946 * r150947;
double r150949 = sin(r150945);
double r150950 = r150949 * r150943;
double r150951 = r150937 * r150935;
double r150952 = 3.0;
double r150953 = pow(r150951, r150952);
double r150954 = sin(r150934);
double r150955 = r150933 * r150954;
double r150956 = pow(r150955, r150952);
double r150957 = r150953 + r150956;
double r150958 = r150950 * r150957;
double r150959 = r150951 * r150951;
double r150960 = r150955 * r150955;
double r150961 = r150951 * r150955;
double r150962 = r150960 - r150961;
double r150963 = r150959 + r150962;
double r150964 = r150958 / r150963;
double r150965 = r150948 - r150964;
double r150966 = atan2(r150944, r150965);
return r150966;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



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