\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(\cos \lambda_2 \cdot \sin \lambda_1 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{\sin \phi_2 \cdot \cos \phi_1 - \left(\sin \lambda_2 \cdot \sin \lambda_1 + \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\sqrt[3]{\cos \phi_2} \cdot \left(\sin \phi_1 \cdot \left(\sqrt[3]{\cos \phi_2} \cdot \sqrt[3]{\cos \phi_2}\right)\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r4689848 = lambda1;
double r4689849 = lambda2;
double r4689850 = r4689848 - r4689849;
double r4689851 = sin(r4689850);
double r4689852 = phi2;
double r4689853 = cos(r4689852);
double r4689854 = r4689851 * r4689853;
double r4689855 = phi1;
double r4689856 = cos(r4689855);
double r4689857 = sin(r4689852);
double r4689858 = r4689856 * r4689857;
double r4689859 = sin(r4689855);
double r4689860 = r4689859 * r4689853;
double r4689861 = cos(r4689850);
double r4689862 = r4689860 * r4689861;
double r4689863 = r4689858 - r4689862;
double r4689864 = atan2(r4689854, r4689863);
return r4689864;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r4689865 = lambda2;
double r4689866 = cos(r4689865);
double r4689867 = lambda1;
double r4689868 = sin(r4689867);
double r4689869 = r4689866 * r4689868;
double r4689870 = cos(r4689867);
double r4689871 = sin(r4689865);
double r4689872 = r4689870 * r4689871;
double r4689873 = r4689869 - r4689872;
double r4689874 = phi2;
double r4689875 = cos(r4689874);
double r4689876 = r4689873 * r4689875;
double r4689877 = sin(r4689874);
double r4689878 = phi1;
double r4689879 = cos(r4689878);
double r4689880 = r4689877 * r4689879;
double r4689881 = r4689871 * r4689868;
double r4689882 = r4689866 * r4689870;
double r4689883 = r4689881 + r4689882;
double r4689884 = cbrt(r4689875);
double r4689885 = sin(r4689878);
double r4689886 = r4689884 * r4689884;
double r4689887 = r4689885 * r4689886;
double r4689888 = r4689884 * r4689887;
double r4689889 = r4689883 * r4689888;
double r4689890 = r4689880 - r4689889;
double r4689891 = atan2(r4689876, r4689890);
return r4689891;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.4
rmApplied sin-diff6.9
rmApplied cos-diff0.2
rmApplied add-cube-cbrt0.2
Applied associate-*r*0.2
Final simplification0.2
herbie shell --seed 2019143 +o rules:numerics
(FPCore (lambda1 lambda2 phi1 phi2)
:name "Bearing on a great circle"
(atan2 (* (sin (- lambda1 lambda2)) (cos phi2)) (- (* (cos phi1) (sin phi2)) (* (* (sin phi1) (cos phi2)) (cos (- lambda1 lambda2))))))