\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)}{\sqrt[3]{{\left(\cos \phi_1 + \cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right)}^{3}}}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r55994 = lambda1;
double r55995 = phi2;
double r55996 = cos(r55995);
double r55997 = lambda2;
double r55998 = r55994 - r55997;
double r55999 = sin(r55998);
double r56000 = r55996 * r55999;
double r56001 = phi1;
double r56002 = cos(r56001);
double r56003 = cos(r55998);
double r56004 = r55996 * r56003;
double r56005 = r56002 + r56004;
double r56006 = atan2(r56000, r56005);
double r56007 = r55994 + r56006;
return r56007;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r56008 = lambda1;
double r56009 = phi2;
double r56010 = cos(r56009);
double r56011 = sin(r56008);
double r56012 = lambda2;
double r56013 = cos(r56012);
double r56014 = r56011 * r56013;
double r56015 = cos(r56008);
double r56016 = sin(r56012);
double r56017 = r56015 * r56016;
double r56018 = r56014 - r56017;
double r56019 = r56010 * r56018;
double r56020 = phi1;
double r56021 = cos(r56020);
double r56022 = r56015 * r56013;
double r56023 = r56011 * r56016;
double r56024 = r56022 + r56023;
double r56025 = r56010 * r56024;
double r56026 = r56021 + r56025;
double r56027 = 3.0;
double r56028 = pow(r56026, r56027);
double r56029 = cbrt(r56028);
double r56030 = atan2(r56019, r56029);
double r56031 = r56008 + r56030;
return r56031;
}



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
Applied distribute-rgt-in0.2
Applied associate-+r+0.2
rmApplied add-cbrt-cube0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019354
(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)))))))