\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 - \frac{\sin \phi_1 \cdot \cos \phi_2}{\frac{\frac{\cos \lambda_2 \cdot \cos \lambda_1 - \sin \lambda_2 \cdot \sin \lambda_1}{\sin \lambda_2 \cdot \sin \lambda_1 + \cos \lambda_2 \cdot \cos \lambda_1}}{\cos \lambda_2 \cdot \cos \lambda_1 - \sin \lambda_2 \cdot \sin \lambda_1}}}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r5343850 = lambda1;
double r5343851 = lambda2;
double r5343852 = r5343850 - r5343851;
double r5343853 = sin(r5343852);
double r5343854 = phi2;
double r5343855 = cos(r5343854);
double r5343856 = r5343853 * r5343855;
double r5343857 = phi1;
double r5343858 = cos(r5343857);
double r5343859 = sin(r5343854);
double r5343860 = r5343858 * r5343859;
double r5343861 = sin(r5343857);
double r5343862 = r5343861 * r5343855;
double r5343863 = cos(r5343852);
double r5343864 = r5343862 * r5343863;
double r5343865 = r5343860 - r5343864;
double r5343866 = atan2(r5343856, r5343865);
return r5343866;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r5343867 = lambda2;
double r5343868 = cos(r5343867);
double r5343869 = lambda1;
double r5343870 = sin(r5343869);
double r5343871 = r5343868 * r5343870;
double r5343872 = cos(r5343869);
double r5343873 = sin(r5343867);
double r5343874 = r5343872 * r5343873;
double r5343875 = r5343871 - r5343874;
double r5343876 = phi2;
double r5343877 = cos(r5343876);
double r5343878 = r5343875 * r5343877;
double r5343879 = sin(r5343876);
double r5343880 = phi1;
double r5343881 = cos(r5343880);
double r5343882 = r5343879 * r5343881;
double r5343883 = sin(r5343880);
double r5343884 = r5343883 * r5343877;
double r5343885 = r5343868 * r5343872;
double r5343886 = r5343873 * r5343870;
double r5343887 = r5343885 - r5343886;
double r5343888 = r5343886 + r5343885;
double r5343889 = r5343887 / r5343888;
double r5343890 = r5343889 / r5343887;
double r5343891 = r5343884 / r5343890;
double r5343892 = r5343882 - r5343891;
double r5343893 = atan2(r5343878, r5343892);
return r5343893;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.5
rmApplied sin-diff6.7
rmApplied cos-diff0.2
rmApplied flip-+0.2
Applied associate-*r/0.2
rmApplied associate-/l*0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019169
(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))))))