\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{{\left(\cos \phi_1\right)}^{3} + {\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right)}^{3}}{\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot \left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right) - \cos \phi_1\right) + \cos \phi_1 \cdot \cos \phi_1}}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r47935 = lambda1;
double r47936 = phi2;
double r47937 = cos(r47936);
double r47938 = lambda2;
double r47939 = r47935 - r47938;
double r47940 = sin(r47939);
double r47941 = r47937 * r47940;
double r47942 = phi1;
double r47943 = cos(r47942);
double r47944 = cos(r47939);
double r47945 = r47937 * r47944;
double r47946 = r47943 + r47945;
double r47947 = atan2(r47941, r47946);
double r47948 = r47935 + r47947;
return r47948;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r47949 = lambda1;
double r47950 = phi2;
double r47951 = cos(r47950);
double r47952 = sin(r47949);
double r47953 = lambda2;
double r47954 = cos(r47953);
double r47955 = r47952 * r47954;
double r47956 = cos(r47949);
double r47957 = sin(r47953);
double r47958 = r47956 * r47957;
double r47959 = r47955 - r47958;
double r47960 = r47951 * r47959;
double r47961 = phi1;
double r47962 = cos(r47961);
double r47963 = 3.0;
double r47964 = pow(r47962, r47963);
double r47965 = r47956 * r47954;
double r47966 = r47952 * r47957;
double r47967 = r47965 + r47966;
double r47968 = r47951 * r47967;
double r47969 = pow(r47968, r47963);
double r47970 = r47964 + r47969;
double r47971 = r47968 - r47962;
double r47972 = r47968 * r47971;
double r47973 = r47962 * r47962;
double r47974 = r47972 + r47973;
double r47975 = r47970 / r47974;
double r47976 = atan2(r47960, r47975);
double r47977 = r47949 + r47976;
return r47977;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 0.9
rmApplied sin-diff0.9
rmApplied cos-diff0.2
rmApplied flip3-+0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019352
(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)))))))