\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)}\tan^{-1}_* \frac{\cos \phi_2 \cdot \sin \left(\lambda_1 - \lambda_2\right)}{\cos \phi_2 \cdot \cos \left(\lambda_1 - \lambda_2\right) + \cos \phi_1} + \lambda_1double f(double lambda1, double lambda2, double phi1, double phi2) {
double r1509766 = lambda1;
double r1509767 = phi2;
double r1509768 = cos(r1509767);
double r1509769 = lambda2;
double r1509770 = r1509766 - r1509769;
double r1509771 = sin(r1509770);
double r1509772 = r1509768 * r1509771;
double r1509773 = phi1;
double r1509774 = cos(r1509773);
double r1509775 = cos(r1509770);
double r1509776 = r1509768 * r1509775;
double r1509777 = r1509774 + r1509776;
double r1509778 = atan2(r1509772, r1509777);
double r1509779 = r1509766 + r1509778;
return r1509779;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r1509780 = phi2;
double r1509781 = cos(r1509780);
double r1509782 = lambda1;
double r1509783 = lambda2;
double r1509784 = r1509782 - r1509783;
double r1509785 = sin(r1509784);
double r1509786 = r1509781 * r1509785;
double r1509787 = cos(r1509784);
double r1509788 = r1509781 * r1509787;
double r1509789 = phi1;
double r1509790 = cos(r1509789);
double r1509791 = r1509788 + r1509790;
double r1509792 = atan2(r1509786, r1509791);
double r1509793 = r1509792 + r1509782;
return r1509793;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 0
Final simplification0
herbie shell --seed 2019104
(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)))))))