\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(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\sqrt[3]{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)} \cdot \sqrt[3]{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)}\right) \cdot \sqrt[3]{\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 r119845 = lambda1;
double r119846 = lambda2;
double r119847 = r119845 - r119846;
double r119848 = sin(r119847);
double r119849 = phi2;
double r119850 = cos(r119849);
double r119851 = r119848 * r119850;
double r119852 = phi1;
double r119853 = cos(r119852);
double r119854 = sin(r119849);
double r119855 = r119853 * r119854;
double r119856 = sin(r119852);
double r119857 = r119856 * r119850;
double r119858 = cos(r119847);
double r119859 = r119857 * r119858;
double r119860 = r119855 - r119859;
double r119861 = atan2(r119851, r119860);
return r119861;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r119862 = lambda1;
double r119863 = sin(r119862);
double r119864 = lambda2;
double r119865 = cos(r119864);
double r119866 = r119863 * r119865;
double r119867 = cos(r119862);
double r119868 = -r119864;
double r119869 = sin(r119868);
double r119870 = r119867 * r119869;
double r119871 = r119866 + r119870;
double r119872 = phi2;
double r119873 = cos(r119872);
double r119874 = r119871 * r119873;
double r119875 = phi1;
double r119876 = cos(r119875);
double r119877 = sin(r119872);
double r119878 = r119876 * r119877;
double r119879 = sin(r119875);
double r119880 = r119879 * r119873;
double r119881 = r119867 * r119865;
double r119882 = r119880 * r119881;
double r119883 = sin(r119864);
double r119884 = r119863 * r119883;
double r119885 = r119880 * r119884;
double r119886 = cbrt(r119885);
double r119887 = r119886 * r119886;
double r119888 = r119887 * r119886;
double r119889 = r119882 + r119888;
double r119890 = r119878 - r119889;
double r119891 = atan2(r119874, r119890);
return r119891;
}



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.2
Final simplification0.2
herbie shell --seed 2020036 +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))))))