\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 r2034886 = lambda1;
double r2034887 = phi2;
double r2034888 = cos(r2034887);
double r2034889 = lambda2;
double r2034890 = r2034886 - r2034889;
double r2034891 = sin(r2034890);
double r2034892 = r2034888 * r2034891;
double r2034893 = phi1;
double r2034894 = cos(r2034893);
double r2034895 = cos(r2034890);
double r2034896 = r2034888 * r2034895;
double r2034897 = r2034894 + r2034896;
double r2034898 = atan2(r2034892, r2034897);
double r2034899 = r2034886 + r2034898;
return r2034899;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r2034900 = phi2;
double r2034901 = cos(r2034900);
double r2034902 = lambda1;
double r2034903 = lambda2;
double r2034904 = r2034902 - r2034903;
double r2034905 = sin(r2034904);
double r2034906 = r2034901 * r2034905;
double r2034907 = cos(r2034904);
double r2034908 = r2034901 * r2034907;
double r2034909 = phi1;
double r2034910 = cos(r2034909);
double r2034911 = r2034908 + r2034910;
double r2034912 = atan2(r2034906, r2034911);
double r2034913 = r2034912 + r2034902;
return r2034913;
}



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 2019121
(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)))))))