\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 \left(-\lambda_2\right)\right)}{\frac{{\left(\cos \phi_1\right)}^{3} + {\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right)}^{3}}{\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot \frac{{\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right)}^{2} - {\left(\cos \phi_1\right)}^{2}}{\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right) + \cos \phi_1} + \cos \phi_1 \cdot \cos \phi_1}}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r58421 = lambda1;
double r58422 = phi2;
double r58423 = cos(r58422);
double r58424 = lambda2;
double r58425 = r58421 - r58424;
double r58426 = sin(r58425);
double r58427 = r58423 * r58426;
double r58428 = phi1;
double r58429 = cos(r58428);
double r58430 = cos(r58425);
double r58431 = r58423 * r58430;
double r58432 = r58429 + r58431;
double r58433 = atan2(r58427, r58432);
double r58434 = r58421 + r58433;
return r58434;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r58435 = lambda1;
double r58436 = phi2;
double r58437 = cos(r58436);
double r58438 = sin(r58435);
double r58439 = lambda2;
double r58440 = cos(r58439);
double r58441 = r58438 * r58440;
double r58442 = cos(r58435);
double r58443 = -r58439;
double r58444 = sin(r58443);
double r58445 = r58442 * r58444;
double r58446 = r58441 + r58445;
double r58447 = r58437 * r58446;
double r58448 = phi1;
double r58449 = cos(r58448);
double r58450 = 3.0;
double r58451 = pow(r58449, r58450);
double r58452 = r58442 * r58440;
double r58453 = sin(r58439);
double r58454 = r58438 * r58453;
double r58455 = r58452 + r58454;
double r58456 = r58437 * r58455;
double r58457 = pow(r58456, r58450);
double r58458 = r58451 + r58457;
double r58459 = 2.0;
double r58460 = pow(r58456, r58459);
double r58461 = pow(r58449, r58459);
double r58462 = r58460 - r58461;
double r58463 = r58456 + r58449;
double r58464 = r58462 / r58463;
double r58465 = r58456 * r58464;
double r58466 = r58449 * r58449;
double r58467 = r58465 + r58466;
double r58468 = r58458 / r58467;
double r58469 = atan2(r58447, r58468);
double r58470 = r58435 + r58469;
return r58470;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 0.8
rmApplied sub-neg0.8
Applied sin-sum0.7
Simplified0.7
rmApplied cos-diff0.2
rmApplied flip3-+0.3
Simplified0.3
rmApplied flip--0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2020020
(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)))))))