\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(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1 + \log \left(e^{\sin \lambda_2 \cdot \sin \lambda_1}\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r56968 = lambda1;
double r56969 = lambda2;
double r56970 = r56968 - r56969;
double r56971 = sin(r56970);
double r56972 = phi2;
double r56973 = cos(r56972);
double r56974 = r56971 * r56973;
double r56975 = phi1;
double r56976 = cos(r56975);
double r56977 = sin(r56972);
double r56978 = r56976 * r56977;
double r56979 = sin(r56975);
double r56980 = r56979 * r56973;
double r56981 = cos(r56970);
double r56982 = r56980 * r56981;
double r56983 = r56978 - r56982;
double r56984 = atan2(r56974, r56983);
return r56984;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r56985 = lambda1;
double r56986 = sin(r56985);
double r56987 = lambda2;
double r56988 = cos(r56987);
double r56989 = r56986 * r56988;
double r56990 = cos(r56985);
double r56991 = -r56987;
double r56992 = sin(r56991);
double r56993 = r56990 * r56992;
double r56994 = r56989 + r56993;
double r56995 = phi2;
double r56996 = cos(r56995);
double r56997 = r56994 * r56996;
double r56998 = phi1;
double r56999 = cos(r56998);
double r57000 = sin(r56995);
double r57001 = r56999 * r57000;
double r57002 = sin(r56998);
double r57003 = r57002 * r56996;
double r57004 = r56988 * r56990;
double r57005 = sin(r56987);
double r57006 = r57005 * r56986;
double r57007 = exp(r57006);
double r57008 = log(r57007);
double r57009 = r57004 + r57008;
double r57010 = r57003 * r57009;
double r57011 = r57001 - r57010;
double r57012 = atan2(r56997, r57011);
return r57012;
}



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 cos-diff0.2
Simplified0.2
Simplified0.2
rmApplied add-log-exp0.2
Final simplification0.2
herbie shell --seed 2019305
(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))))))