\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} + \sqrt[3]{{\left({\left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right)\right)}^{3}\right)}^{3}}}{\cos \phi_1 \cdot \cos \phi_1 + \left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right)\right) \cdot \left(\cos \phi_2 \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2 + \cos \lambda_1 \cdot \cos \lambda_2\right) - \cos \phi_1\right)}}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r61993 = lambda1;
double r61994 = phi2;
double r61995 = cos(r61994);
double r61996 = lambda2;
double r61997 = r61993 - r61996;
double r61998 = sin(r61997);
double r61999 = r61995 * r61998;
double r62000 = phi1;
double r62001 = cos(r62000);
double r62002 = cos(r61997);
double r62003 = r61995 * r62002;
double r62004 = r62001 + r62003;
double r62005 = atan2(r61999, r62004);
double r62006 = r61993 + r62005;
return r62006;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r62007 = lambda1;
double r62008 = phi2;
double r62009 = cos(r62008);
double r62010 = sin(r62007);
double r62011 = lambda2;
double r62012 = cos(r62011);
double r62013 = r62010 * r62012;
double r62014 = cos(r62007);
double r62015 = sin(r62011);
double r62016 = r62014 * r62015;
double r62017 = r62013 - r62016;
double r62018 = r62009 * r62017;
double r62019 = phi1;
double r62020 = cos(r62019);
double r62021 = 3.0;
double r62022 = pow(r62020, r62021);
double r62023 = r62010 * r62015;
double r62024 = r62014 * r62012;
double r62025 = r62023 + r62024;
double r62026 = r62009 * r62025;
double r62027 = pow(r62026, r62021);
double r62028 = pow(r62027, r62021);
double r62029 = cbrt(r62028);
double r62030 = r62022 + r62029;
double r62031 = r62020 * r62020;
double r62032 = r62026 - r62020;
double r62033 = r62026 * r62032;
double r62034 = r62031 + r62033;
double r62035 = r62030 / r62034;
double r62036 = atan2(r62018, r62035);
double r62037 = r62007 + r62036;
return r62037;
}



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 sub-neg0.9
Applied cos-sum0.2
Simplified0.2
rmApplied flip3-+0.3
Simplified0.3
Simplified0.3
rmApplied add-cbrt-cube0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019347
(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)))))))