\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}{\left(\cos \phi_1 \cdot \left(\sqrt[3]{\sin \phi_2} \cdot \sqrt[3]{\sin \phi_2}\right)\right) \cdot \left(\sqrt[3]{\sqrt[3]{\sin \phi_2} \cdot \sqrt[3]{\sin \phi_2}} \cdot \sqrt[3]{\sqrt[3]{\sin \phi_2}}\right) - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r150897 = lambda1;
double r150898 = lambda2;
double r150899 = r150897 - r150898;
double r150900 = sin(r150899);
double r150901 = phi2;
double r150902 = cos(r150901);
double r150903 = r150900 * r150902;
double r150904 = phi1;
double r150905 = cos(r150904);
double r150906 = sin(r150901);
double r150907 = r150905 * r150906;
double r150908 = sin(r150904);
double r150909 = r150908 * r150902;
double r150910 = cos(r150899);
double r150911 = r150909 * r150910;
double r150912 = r150907 - r150911;
double r150913 = atan2(r150903, r150912);
return r150913;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r150914 = lambda1;
double r150915 = sin(r150914);
double r150916 = lambda2;
double r150917 = cos(r150916);
double r150918 = r150915 * r150917;
double r150919 = cos(r150914);
double r150920 = sin(r150916);
double r150921 = r150919 * r150920;
double r150922 = r150918 - r150921;
double r150923 = phi2;
double r150924 = cos(r150923);
double r150925 = r150922 * r150924;
double r150926 = phi1;
double r150927 = cos(r150926);
double r150928 = sin(r150923);
double r150929 = cbrt(r150928);
double r150930 = r150929 * r150929;
double r150931 = r150927 * r150930;
double r150932 = cbrt(r150930);
double r150933 = cbrt(r150929);
double r150934 = r150932 * r150933;
double r150935 = r150931 * r150934;
double r150936 = sin(r150926);
double r150937 = r150936 * r150924;
double r150938 = r150919 * r150917;
double r150939 = -r150916;
double r150940 = sin(r150939);
double r150941 = r150915 * r150940;
double r150942 = r150938 - r150941;
double r150943 = r150937 * r150942;
double r150944 = r150935 - r150943;
double r150945 = atan2(r150925, r150944);
return r150945;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.5
rmApplied sin-diff7.0
rmApplied sub-neg7.0
Applied cos-sum0.2
Simplified0.2
rmApplied add-cube-cbrt0.4
Applied associate-*r*0.4
rmApplied add-cube-cbrt0.4
Applied cbrt-prod0.4
Final simplification0.4
herbie shell --seed 2019322
(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))))))