\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 - \left({\left({\left(\sin \phi_1\right)}^{2} \cdot \left({\left(\cos \phi_2\right)}^{2} \cdot \left({\left(\cos \lambda_1\right)}^{2} \cdot {\left(\cos \lambda_2\right)}^{2}\right)\right)\right)}^{\frac{1}{3}} \cdot \sqrt[3]{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)} + \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r120851 = lambda1;
double r120852 = lambda2;
double r120853 = r120851 - r120852;
double r120854 = sin(r120853);
double r120855 = phi2;
double r120856 = cos(r120855);
double r120857 = r120854 * r120856;
double r120858 = phi1;
double r120859 = cos(r120858);
double r120860 = sin(r120855);
double r120861 = r120859 * r120860;
double r120862 = sin(r120858);
double r120863 = r120862 * r120856;
double r120864 = cos(r120853);
double r120865 = r120863 * r120864;
double r120866 = r120861 - r120865;
double r120867 = atan2(r120857, r120866);
return r120867;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r120868 = lambda1;
double r120869 = sin(r120868);
double r120870 = lambda2;
double r120871 = cos(r120870);
double r120872 = r120869 * r120871;
double r120873 = cos(r120868);
double r120874 = -r120870;
double r120875 = sin(r120874);
double r120876 = r120873 * r120875;
double r120877 = r120872 + r120876;
double r120878 = phi2;
double r120879 = cos(r120878);
double r120880 = r120877 * r120879;
double r120881 = phi1;
double r120882 = cos(r120881);
double r120883 = sin(r120878);
double r120884 = r120882 * r120883;
double r120885 = sin(r120881);
double r120886 = 2.0;
double r120887 = pow(r120885, r120886);
double r120888 = pow(r120879, r120886);
double r120889 = pow(r120873, r120886);
double r120890 = pow(r120871, r120886);
double r120891 = r120889 * r120890;
double r120892 = r120888 * r120891;
double r120893 = r120887 * r120892;
double r120894 = 0.3333333333333333;
double r120895 = pow(r120893, r120894);
double r120896 = r120885 * r120879;
double r120897 = r120873 * r120871;
double r120898 = r120896 * r120897;
double r120899 = cbrt(r120898);
double r120900 = r120895 * r120899;
double r120901 = sin(r120870);
double r120902 = r120869 * r120901;
double r120903 = r120896 * r120902;
double r120904 = r120900 + r120903;
double r120905 = r120884 - r120904;
double r120906 = atan2(r120880, r120905);
return r120906;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.3
rmApplied sub-neg13.3
Applied sin-sum6.8
Simplified6.8
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
rmApplied add-cube-cbrt0.3
Taylor expanded around inf 0.3
Final simplification0.3
herbie shell --seed 2019297
(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))))))