\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(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2\right)}^{3}}{\left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2\right) \cdot \left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \cos \phi_2 - \cos \phi_1\right) + \cos \phi_1 \cdot \cos \phi_1} + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r49418 = lambda1;
double r49419 = phi2;
double r49420 = cos(r49419);
double r49421 = lambda2;
double r49422 = r49418 - r49421;
double r49423 = sin(r49422);
double r49424 = r49420 * r49423;
double r49425 = phi1;
double r49426 = cos(r49425);
double r49427 = cos(r49422);
double r49428 = r49420 * r49427;
double r49429 = r49426 + r49428;
double r49430 = atan2(r49424, r49429);
double r49431 = r49418 + r49430;
return r49431;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r49432 = lambda1;
double r49433 = phi2;
double r49434 = cos(r49433);
double r49435 = sin(r49432);
double r49436 = lambda2;
double r49437 = cos(r49436);
double r49438 = r49435 * r49437;
double r49439 = cos(r49432);
double r49440 = -r49436;
double r49441 = sin(r49440);
double r49442 = r49439 * r49441;
double r49443 = r49438 + r49442;
double r49444 = r49434 * r49443;
double r49445 = phi1;
double r49446 = cos(r49445);
double r49447 = 3.0;
double r49448 = pow(r49446, r49447);
double r49449 = r49439 * r49437;
double r49450 = r49449 * r49434;
double r49451 = pow(r49450, r49447);
double r49452 = r49448 + r49451;
double r49453 = r49450 - r49446;
double r49454 = r49450 * r49453;
double r49455 = r49446 * r49446;
double r49456 = r49454 + r49455;
double r49457 = r49452 / r49456;
double r49458 = sin(r49436);
double r49459 = r49435 * r49458;
double r49460 = r49459 * r49434;
double r49461 = r49457 + r49460;
double r49462 = atan2(r49444, r49461);
double r49463 = r49432 + r49462;
return r49463;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 0.9
rmApplied sub-neg0.9
Applied sin-sum0.9
Simplified0.9
rmApplied cos-diff0.2
Applied distribute-rgt-in0.2
Applied associate-+r+0.2
rmApplied flip3-+0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019353
(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)))))))