\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(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\left(\sqrt[3]{\sin \lambda_1 \cdot \sin \lambda_2} \cdot \sqrt[3]{\sin \lambda_1 \cdot \sin \lambda_2}\right) \cdot \sqrt[3]{\sin \lambda_1 \cdot \sin \lambda_2}\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r130948 = lambda1;
double r130949 = lambda2;
double r130950 = r130948 - r130949;
double r130951 = sin(r130950);
double r130952 = phi2;
double r130953 = cos(r130952);
double r130954 = r130951 * r130953;
double r130955 = phi1;
double r130956 = cos(r130955);
double r130957 = sin(r130952);
double r130958 = r130956 * r130957;
double r130959 = sin(r130955);
double r130960 = r130959 * r130953;
double r130961 = cos(r130950);
double r130962 = r130960 * r130961;
double r130963 = r130958 - r130962;
double r130964 = atan2(r130954, r130963);
return r130964;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r130965 = lambda1;
double r130966 = sin(r130965);
double r130967 = lambda2;
double r130968 = cos(r130967);
double r130969 = r130966 * r130968;
double r130970 = cos(r130965);
double r130971 = sin(r130967);
double r130972 = r130970 * r130971;
double r130973 = r130969 - r130972;
double r130974 = phi2;
double r130975 = cos(r130974);
double r130976 = r130973 * r130975;
double r130977 = phi1;
double r130978 = cos(r130977);
double r130979 = sin(r130974);
double r130980 = r130978 * r130979;
double r130981 = sin(r130977);
double r130982 = r130981 * r130975;
double r130983 = r130970 * r130968;
double r130984 = r130982 * r130983;
double r130985 = r130966 * r130971;
double r130986 = cbrt(r130985);
double r130987 = r130986 * r130986;
double r130988 = r130987 * r130986;
double r130989 = r130982 * r130988;
double r130990 = r130984 + r130989;
double r130991 = r130980 - r130990;
double r130992 = atan2(r130976, r130991);
return r130992;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.0
rmApplied sin-diff6.5
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
rmApplied add-cube-cbrt0.2
Final simplification0.2
herbie shell --seed 2019362
(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))))))