\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}{\cos \phi_1 \cdot \sin \phi_2 - \left(\left(\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \lambda_1\right) \cdot \cos \lambda_2 + \log \left(e^{\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 r101824 = lambda1;
double r101825 = lambda2;
double r101826 = r101824 - r101825;
double r101827 = sin(r101826);
double r101828 = phi2;
double r101829 = cos(r101828);
double r101830 = r101827 * r101829;
double r101831 = phi1;
double r101832 = cos(r101831);
double r101833 = sin(r101828);
double r101834 = r101832 * r101833;
double r101835 = sin(r101831);
double r101836 = r101835 * r101829;
double r101837 = cos(r101826);
double r101838 = r101836 * r101837;
double r101839 = r101834 - r101838;
double r101840 = atan2(r101830, r101839);
return r101840;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r101841 = lambda1;
double r101842 = sin(r101841);
double r101843 = lambda2;
double r101844 = cos(r101843);
double r101845 = r101842 * r101844;
double r101846 = cos(r101841);
double r101847 = sin(r101843);
double r101848 = r101846 * r101847;
double r101849 = r101845 - r101848;
double r101850 = phi2;
double r101851 = cos(r101850);
double r101852 = r101849 * r101851;
double r101853 = phi1;
double r101854 = cos(r101853);
double r101855 = sin(r101850);
double r101856 = r101854 * r101855;
double r101857 = sin(r101853);
double r101858 = r101857 * r101851;
double r101859 = r101858 * r101846;
double r101860 = r101859 * r101844;
double r101861 = exp(r101858);
double r101862 = log(r101861);
double r101863 = r101842 * r101847;
double r101864 = r101862 * r101863;
double r101865 = r101860 + r101864;
double r101866 = r101856 - r101865;
double r101867 = atan2(r101852, r101866);
return r101867;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.2
rmApplied sin-diff6.8
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
rmApplied add-log-exp0.2
rmApplied associate-*r*0.2
Final simplification0.2
herbie shell --seed 2020018
(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))))))