\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)}{\left(\cos \phi_1 + \left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2\right) + \log \left(e^{\sin \lambda_1 \cdot \sin \lambda_2}\right) \cdot \cos \phi_2}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r47444 = lambda1;
double r47445 = phi2;
double r47446 = cos(r47445);
double r47447 = lambda2;
double r47448 = r47444 - r47447;
double r47449 = sin(r47448);
double r47450 = r47446 * r47449;
double r47451 = phi1;
double r47452 = cos(r47451);
double r47453 = cos(r47448);
double r47454 = r47446 * r47453;
double r47455 = r47452 + r47454;
double r47456 = atan2(r47450, r47455);
double r47457 = r47444 + r47456;
return r47457;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r47458 = lambda1;
double r47459 = phi2;
double r47460 = cos(r47459);
double r47461 = sin(r47458);
double r47462 = lambda2;
double r47463 = cos(r47462);
double r47464 = r47461 * r47463;
double r47465 = cos(r47458);
double r47466 = sin(r47462);
double r47467 = r47465 * r47466;
double r47468 = r47464 - r47467;
double r47469 = r47460 * r47468;
double r47470 = phi1;
double r47471 = cos(r47470);
double r47472 = r47465 * r47463;
double r47473 = r47472 * r47460;
double r47474 = r47471 + r47473;
double r47475 = r47461 * r47466;
double r47476 = exp(r47475);
double r47477 = log(r47476);
double r47478 = r47477 * r47460;
double r47479 = r47474 + r47478;
double r47480 = atan2(r47469, r47479);
double r47481 = r47458 + r47480;
return r47481;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 0.9
rmApplied cos-diff0.9
Applied distribute-rgt-in0.9
Applied associate-+r+0.9
rmApplied sin-diff0.2
rmApplied add-log-exp0.2
Final simplification0.2
herbie shell --seed 2020083
(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)))))))