\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(\log \left(e^{\left(\sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)}\right) + \left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r3707976 = lambda1;
double r3707977 = lambda2;
double r3707978 = r3707976 - r3707977;
double r3707979 = sin(r3707978);
double r3707980 = phi2;
double r3707981 = cos(r3707980);
double r3707982 = r3707979 * r3707981;
double r3707983 = phi1;
double r3707984 = cos(r3707983);
double r3707985 = sin(r3707980);
double r3707986 = r3707984 * r3707985;
double r3707987 = sin(r3707983);
double r3707988 = r3707987 * r3707981;
double r3707989 = cos(r3707978);
double r3707990 = r3707988 * r3707989;
double r3707991 = r3707986 - r3707990;
double r3707992 = atan2(r3707982, r3707991);
return r3707992;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r3707993 = lambda2;
double r3707994 = cos(r3707993);
double r3707995 = lambda1;
double r3707996 = sin(r3707995);
double r3707997 = r3707994 * r3707996;
double r3707998 = cos(r3707995);
double r3707999 = sin(r3707993);
double r3708000 = r3707998 * r3707999;
double r3708001 = r3707997 - r3708000;
double r3708002 = phi2;
double r3708003 = cos(r3708002);
double r3708004 = r3708001 * r3708003;
double r3708005 = sin(r3708002);
double r3708006 = phi1;
double r3708007 = cos(r3708006);
double r3708008 = r3708005 * r3708007;
double r3708009 = r3707999 * r3707996;
double r3708010 = sin(r3708006);
double r3708011 = r3708010 * r3708003;
double r3708012 = r3708009 * r3708011;
double r3708013 = exp(r3708012);
double r3708014 = log(r3708013);
double r3708015 = r3707994 * r3707998;
double r3708016 = r3708015 * r3708011;
double r3708017 = r3708014 + r3708016;
double r3708018 = r3708008 - r3708017;
double r3708019 = atan2(r3708004, r3708018);
return r3708019;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.4
rmApplied sin-diff6.9
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
rmApplied add-log-exp0.2
Final simplification0.2
herbie shell --seed 2019152
(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))))))