\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(\mathsf{expm1}\left(\mathsf{log1p}\left(\sin \lambda_1 \cdot \cos \lambda_2\right)\right) + \cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r83841 = lambda1;
double r83842 = lambda2;
double r83843 = r83841 - r83842;
double r83844 = sin(r83843);
double r83845 = phi2;
double r83846 = cos(r83845);
double r83847 = r83844 * r83846;
double r83848 = phi1;
double r83849 = cos(r83848);
double r83850 = sin(r83845);
double r83851 = r83849 * r83850;
double r83852 = sin(r83848);
double r83853 = r83852 * r83846;
double r83854 = cos(r83843);
double r83855 = r83853 * r83854;
double r83856 = r83851 - r83855;
double r83857 = atan2(r83847, r83856);
return r83857;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r83858 = lambda1;
double r83859 = sin(r83858);
double r83860 = lambda2;
double r83861 = cos(r83860);
double r83862 = r83859 * r83861;
double r83863 = log1p(r83862);
double r83864 = expm1(r83863);
double r83865 = cos(r83858);
double r83866 = -r83860;
double r83867 = sin(r83866);
double r83868 = r83865 * r83867;
double r83869 = r83864 + r83868;
double r83870 = phi2;
double r83871 = cos(r83870);
double r83872 = r83869 * r83871;
double r83873 = phi1;
double r83874 = cos(r83873);
double r83875 = sin(r83870);
double r83876 = r83874 * r83875;
double r83877 = sin(r83873);
double r83878 = r83877 * r83871;
double r83879 = r83865 * r83861;
double r83880 = r83859 * r83867;
double r83881 = r83879 - r83880;
double r83882 = r83878 * r83881;
double r83883 = r83876 - r83882;
double r83884 = atan2(r83872, r83883);
return r83884;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.0
rmApplied sub-neg13.0
Applied sin-sum6.6
Simplified6.6
rmApplied sub-neg6.6
Applied cos-sum0.2
Simplified0.2
rmApplied expm1-log1p-u0.2
Final simplification0.2
herbie shell --seed 2019303 +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))))))