\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 \left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right)}{\sqrt[3]{\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_2 \cdot \sin \lambda_1\right) + \cos \phi_1\right) \cdot \left(\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_2 \cdot \sin \lambda_1\right) + \cos \phi_1\right) \cdot \left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_2 \cdot \sin \lambda_1\right) + \cos \phi_1\right)\right)}} + \lambda_1double f(double lambda1, double lambda2, double phi1, double phi2) {
double r975186 = lambda1;
double r975187 = phi2;
double r975188 = cos(r975187);
double r975189 = lambda2;
double r975190 = r975186 - r975189;
double r975191 = sin(r975190);
double r975192 = r975188 * r975191;
double r975193 = phi1;
double r975194 = cos(r975193);
double r975195 = cos(r975190);
double r975196 = r975188 * r975195;
double r975197 = r975194 + r975196;
double r975198 = atan2(r975192, r975197);
double r975199 = r975186 + r975198;
return r975199;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r975200 = phi2;
double r975201 = cos(r975200);
double r975202 = lambda1;
double r975203 = sin(r975202);
double r975204 = lambda2;
double r975205 = cos(r975204);
double r975206 = r975203 * r975205;
double r975207 = cos(r975202);
double r975208 = sin(r975204);
double r975209 = r975207 * r975208;
double r975210 = r975206 - r975209;
double r975211 = r975201 * r975210;
double r975212 = r975207 * r975205;
double r975213 = r975208 * r975203;
double r975214 = r975212 + r975213;
double r975215 = r975201 * r975214;
double r975216 = phi1;
double r975217 = cos(r975216);
double r975218 = r975215 + r975217;
double r975219 = r975218 * r975218;
double r975220 = r975218 * r975219;
double r975221 = cbrt(r975220);
double r975222 = atan2(r975211, r975221);
double r975223 = r975222 + r975202;
return r975223;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 0.8
rmApplied cos-diff0.8
rmApplied sin-diff0.2
rmApplied add-cbrt-cube0.3
Final simplification0.3
herbie shell --seed 2019152
(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)))))))