\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)}{\log \left(\sqrt[3]{e^{\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_2 \cdot \sin \lambda_1\right) + \cos \phi_1} \cdot \left(e^{\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_2 \cdot \sin \lambda_1\right) + \cos \phi_1} \cdot e^{\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 r1154379 = lambda1;
double r1154380 = phi2;
double r1154381 = cos(r1154380);
double r1154382 = lambda2;
double r1154383 = r1154379 - r1154382;
double r1154384 = sin(r1154383);
double r1154385 = r1154381 * r1154384;
double r1154386 = phi1;
double r1154387 = cos(r1154386);
double r1154388 = cos(r1154383);
double r1154389 = r1154381 * r1154388;
double r1154390 = r1154387 + r1154389;
double r1154391 = atan2(r1154385, r1154390);
double r1154392 = r1154379 + r1154391;
return r1154392;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r1154393 = phi2;
double r1154394 = cos(r1154393);
double r1154395 = lambda1;
double r1154396 = sin(r1154395);
double r1154397 = lambda2;
double r1154398 = cos(r1154397);
double r1154399 = r1154396 * r1154398;
double r1154400 = cos(r1154395);
double r1154401 = sin(r1154397);
double r1154402 = r1154400 * r1154401;
double r1154403 = r1154399 - r1154402;
double r1154404 = r1154394 * r1154403;
double r1154405 = r1154400 * r1154398;
double r1154406 = r1154401 * r1154396;
double r1154407 = r1154405 + r1154406;
double r1154408 = r1154394 * r1154407;
double r1154409 = phi1;
double r1154410 = cos(r1154409);
double r1154411 = r1154408 + r1154410;
double r1154412 = exp(r1154411);
double r1154413 = r1154412 * r1154412;
double r1154414 = r1154412 * r1154413;
double r1154415 = cbrt(r1154414);
double r1154416 = log(r1154415);
double r1154417 = atan2(r1154404, r1154416);
double r1154418 = r1154417 + r1154395;
return r1154418;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



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