\lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_1 + \cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right)}\lambda_1 + \tan^{-1}_* \frac{\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \cos \lambda_2 + \cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}{\log \left(e^{\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_2 \cdot \sin \lambda_1\right) + \cos \phi_1}\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r48972 = lambda1;
double r48973 = phi2;
double r48974 = cos(r48973);
double r48975 = lambda2;
double r48976 = r48972 - r48975;
double r48977 = sin(r48976);
double r48978 = r48974 * r48977;
double r48979 = phi1;
double r48980 = cos(r48979);
double r48981 = cos(r48976);
double r48982 = r48974 * r48981;
double r48983 = r48980 + r48982;
double r48984 = atan2(r48978, r48983);
double r48985 = r48972 + r48984;
return r48985;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r48986 = lambda1;
double r48987 = phi2;
double r48988 = cos(r48987);
double r48989 = sin(r48986);
double r48990 = lambda2;
double r48991 = cos(r48990);
double r48992 = r48989 * r48991;
double r48993 = cos(r48986);
double r48994 = -r48990;
double r48995 = sin(r48994);
double r48996 = r48993 * r48995;
double r48997 = r48992 + r48996;
double r48998 = r48988 * r48997;
double r48999 = r48993 * r48991;
double r49000 = sin(r48990);
double r49001 = r49000 * r48989;
double r49002 = r48999 + r49001;
double r49003 = r48988 * r49002;
double r49004 = phi1;
double r49005 = cos(r49004);
double r49006 = r49003 + r49005;
double r49007 = exp(r49006);
double r49008 = log(r49007);
double r49009 = atan2(r48998, r49008);
double r49010 = r48986 + r49009;
return r49010;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 0.9
rmApplied sub-neg0.9
Applied sin-sum0.8
Simplified0.8
rmApplied sub-neg0.8
Applied cos-sum0.2
Simplified0.2
rmApplied add-log-exp0.3
Applied add-log-exp0.3
Applied sum-log0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019325
(FPCore (lambda1 lambda2 phi1 phi2)
:name "Midpoint on a great circle"
:precision binary64
(+ lambda1 (atan2 (* (cos phi2) (sin (- lambda1 lambda2))) (+ (cos phi1) (* (cos phi2) (cos (- lambda1 lambda2)))))))