\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}{\mathsf{log1p}\left(\mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \sin \phi_1 \cdot \left(\cos \phi_2 \cdot \mathsf{fma}\left(\cos \lambda_2, \cos \lambda_1, \sin \lambda_1 \cdot \sin \lambda_2\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r168820 = lambda1;
double r168821 = lambda2;
double r168822 = r168820 - r168821;
double r168823 = sin(r168822);
double r168824 = phi2;
double r168825 = cos(r168824);
double r168826 = r168823 * r168825;
double r168827 = phi1;
double r168828 = cos(r168827);
double r168829 = sin(r168824);
double r168830 = r168828 * r168829;
double r168831 = sin(r168827);
double r168832 = r168831 * r168825;
double r168833 = cos(r168822);
double r168834 = r168832 * r168833;
double r168835 = r168830 - r168834;
double r168836 = atan2(r168826, r168835);
return r168836;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r168837 = lambda1;
double r168838 = sin(r168837);
double r168839 = lambda2;
double r168840 = cos(r168839);
double r168841 = r168838 * r168840;
double r168842 = cos(r168837);
double r168843 = sin(r168839);
double r168844 = r168842 * r168843;
double r168845 = r168841 - r168844;
double r168846 = phi2;
double r168847 = cos(r168846);
double r168848 = r168845 * r168847;
double r168849 = phi1;
double r168850 = cos(r168849);
double r168851 = sin(r168846);
double r168852 = r168850 * r168851;
double r168853 = expm1(r168852);
double r168854 = log1p(r168853);
double r168855 = sin(r168849);
double r168856 = r168838 * r168843;
double r168857 = fma(r168840, r168842, r168856);
double r168858 = r168847 * r168857;
double r168859 = r168855 * r168858;
double r168860 = r168854 - r168859;
double r168861 = atan2(r168848, r168860);
return r168861;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 13.2
rmApplied sin-diff6.6
rmApplied sub-neg6.6
Applied cos-sum0.2
Simplified0.2
rmApplied associate-*l*0.2
Simplified0.2
rmApplied log1p-expm1-u0.2
Final simplification0.2
herbie shell --seed 2020045 +o rules:numerics
(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))))))