\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)}{\frac{\cos \phi_1 \cdot \cos \phi_1 + \left(\left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2\right) \cdot \left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2\right) - \cos \phi_1 \cdot \left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2\right)\right)}{\frac{\left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2\right) \cdot \left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2 - \cos \phi_1\right) + \cos \phi_1 \cdot \cos \phi_1}{\cos \phi_1 + \left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2}} + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r55748 = lambda1;
double r55749 = phi2;
double r55750 = cos(r55749);
double r55751 = lambda2;
double r55752 = r55748 - r55751;
double r55753 = sin(r55752);
double r55754 = r55750 * r55753;
double r55755 = phi1;
double r55756 = cos(r55755);
double r55757 = cos(r55752);
double r55758 = r55750 * r55757;
double r55759 = r55756 + r55758;
double r55760 = atan2(r55754, r55759);
double r55761 = r55748 + r55760;
return r55761;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r55762 = lambda1;
double r55763 = phi2;
double r55764 = cos(r55763);
double r55765 = sin(r55762);
double r55766 = lambda2;
double r55767 = cos(r55766);
double r55768 = r55765 * r55767;
double r55769 = cos(r55762);
double r55770 = sin(r55766);
double r55771 = r55769 * r55770;
double r55772 = r55768 - r55771;
double r55773 = r55764 * r55772;
double r55774 = phi1;
double r55775 = cos(r55774);
double r55776 = r55775 * r55775;
double r55777 = r55769 * r55767;
double r55778 = r55777 * r55764;
double r55779 = r55778 * r55778;
double r55780 = r55775 * r55778;
double r55781 = r55779 - r55780;
double r55782 = r55776 + r55781;
double r55783 = r55778 - r55775;
double r55784 = r55778 * r55783;
double r55785 = r55784 + r55776;
double r55786 = r55775 + r55778;
double r55787 = r55785 / r55786;
double r55788 = r55782 / r55787;
double r55789 = r55765 * r55770;
double r55790 = r55789 * r55764;
double r55791 = r55788 + r55790;
double r55792 = atan2(r55773, r55791);
double r55793 = r55762 + r55792;
return r55793;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 0.9
rmApplied cos-diff0.9
Applied distribute-rgt-in0.9
Applied associate-+r+0.9
rmApplied sin-diff0.2
rmApplied flip3-+0.2
Simplified0.2
rmApplied sum-cubes0.2
Applied associate-/l*0.2
Final simplification0.2
herbie shell --seed 2020002
(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)))))))