\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 \lambda_2\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 r2289651 = lambda1;
double r2289652 = phi2;
double r2289653 = cos(r2289652);
double r2289654 = lambda2;
double r2289655 = r2289651 - r2289654;
double r2289656 = sin(r2289655);
double r2289657 = r2289653 * r2289656;
double r2289658 = phi1;
double r2289659 = cos(r2289658);
double r2289660 = cos(r2289655);
double r2289661 = r2289653 * r2289660;
double r2289662 = r2289659 + r2289661;
double r2289663 = atan2(r2289657, r2289662);
double r2289664 = r2289651 + r2289663;
return r2289664;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r2289665 = lambda1;
double r2289666 = phi2;
double r2289667 = cos(r2289666);
double r2289668 = sin(r2289665);
double r2289669 = lambda2;
double r2289670 = cos(r2289669);
double r2289671 = r2289668 * r2289670;
double r2289672 = cos(r2289665);
double r2289673 = sin(r2289669);
double r2289674 = r2289672 * r2289673;
double r2289675 = r2289671 - r2289674;
double r2289676 = r2289667 * r2289675;
double r2289677 = r2289672 * r2289670;
double r2289678 = r2289673 * r2289668;
double r2289679 = r2289677 + r2289678;
double r2289680 = r2289667 * r2289679;
double r2289681 = phi1;
double r2289682 = cos(r2289681);
double r2289683 = r2289680 + r2289682;
double r2289684 = exp(r2289683);
double r2289685 = log(r2289684);
double r2289686 = atan2(r2289676, r2289685);
double r2289687 = r2289665 + r2289686;
return r2289687;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 0.9
rmApplied add-log-exp0.9
Applied add-log-exp0.9
Applied sum-log1.0
Simplified0.9
rmApplied cos-diff0.9
rmApplied sin-diff0.3
Final simplification0.3
herbie shell --seed 2019171
(FPCore (lambda1 lambda2 phi1 phi2)
:name "Midpoint on a great circle"
(+ lambda1 (atan2 (* (cos phi2) (sin (- lambda1 lambda2))) (+ (cos phi1) (* (cos phi2) (cos (- lambda1 lambda2)))))))