\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 - \left(\left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right) + \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\left(\left(\sqrt[3]{\sin \lambda_2} \cdot \sqrt[3]{\sin \lambda_2}\right) \cdot \sin \lambda_1\right) \cdot \sqrt[3]{\sin \lambda_2}\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r4003954 = lambda1;
double r4003955 = lambda2;
double r4003956 = r4003954 - r4003955;
double r4003957 = sin(r4003956);
double r4003958 = phi2;
double r4003959 = cos(r4003958);
double r4003960 = r4003957 * r4003959;
double r4003961 = phi1;
double r4003962 = cos(r4003961);
double r4003963 = sin(r4003958);
double r4003964 = r4003962 * r4003963;
double r4003965 = sin(r4003961);
double r4003966 = r4003965 * r4003959;
double r4003967 = cos(r4003956);
double r4003968 = r4003966 * r4003967;
double r4003969 = r4003964 - r4003968;
double r4003970 = atan2(r4003960, r4003969);
return r4003970;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r4003971 = lambda2;
double r4003972 = cos(r4003971);
double r4003973 = lambda1;
double r4003974 = sin(r4003973);
double r4003975 = r4003972 * r4003974;
double r4003976 = cos(r4003973);
double r4003977 = sin(r4003971);
double r4003978 = r4003976 * r4003977;
double r4003979 = r4003975 - r4003978;
double r4003980 = phi2;
double r4003981 = cos(r4003980);
double r4003982 = r4003979 * r4003981;
double r4003983 = sin(r4003980);
double r4003984 = phi1;
double r4003985 = cos(r4003984);
double r4003986 = r4003983 * r4003985;
double r4003987 = r4003972 * r4003976;
double r4003988 = sin(r4003984);
double r4003989 = r4003988 * r4003981;
double r4003990 = r4003987 * r4003989;
double r4003991 = cbrt(r4003977);
double r4003992 = r4003991 * r4003991;
double r4003993 = r4003992 * r4003974;
double r4003994 = r4003993 * r4003991;
double r4003995 = r4003989 * r4003994;
double r4003996 = r4003990 + r4003995;
double r4003997 = r4003986 - r4003996;
double r4003998 = atan2(r4003982, r4003997);
return r4003998;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.4
rmApplied sin-diff6.8
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
rmApplied add-cube-cbrt0.2
Applied associate-*r*0.2
Final simplification0.2
herbie shell --seed 2019146 +o rules:numerics
(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))))))