\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(\cos \lambda_2 \cdot \sin \lambda_1 - \cos \lambda_1 \cdot \sin \lambda_2\right)}{\frac{{\left(\cos \phi_1\right)}^{3} + {\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)\right)}^{3}}{\cos \phi_1 \cdot \cos \phi_1 + \left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)\right) \cdot \left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) - \cos \phi_1\right)} + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r38762 = lambda1;
double r38763 = phi2;
double r38764 = cos(r38763);
double r38765 = lambda2;
double r38766 = r38762 - r38765;
double r38767 = sin(r38766);
double r38768 = r38764 * r38767;
double r38769 = phi1;
double r38770 = cos(r38769);
double r38771 = cos(r38766);
double r38772 = r38764 * r38771;
double r38773 = r38770 + r38772;
double r38774 = atan2(r38768, r38773);
double r38775 = r38762 + r38774;
return r38775;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r38776 = lambda1;
double r38777 = phi2;
double r38778 = cos(r38777);
double r38779 = lambda2;
double r38780 = cos(r38779);
double r38781 = sin(r38776);
double r38782 = r38780 * r38781;
double r38783 = cos(r38776);
double r38784 = sin(r38779);
double r38785 = r38783 * r38784;
double r38786 = r38782 - r38785;
double r38787 = r38778 * r38786;
double r38788 = phi1;
double r38789 = cos(r38788);
double r38790 = 3.0;
double r38791 = pow(r38789, r38790);
double r38792 = r38783 * r38780;
double r38793 = r38778 * r38792;
double r38794 = pow(r38793, r38790);
double r38795 = r38791 + r38794;
double r38796 = r38789 * r38789;
double r38797 = r38793 - r38789;
double r38798 = r38793 * r38797;
double r38799 = r38796 + r38798;
double r38800 = r38795 / r38799;
double r38801 = r38781 * r38784;
double r38802 = r38801 * r38778;
double r38803 = r38800 + r38802;
double r38804 = atan2(r38787, r38803);
double r38805 = r38776 + r38804;
return r38805;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 0.8
rmApplied cos-diff0.8
Applied distribute-rgt-in0.8
Applied associate-+r+0.8
Simplified0.8
rmApplied sin-diff0.2
Simplified0.2
rmApplied flip3-+0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019208
(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)))))))