\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)}{\left(\cos \phi_1 + \frac{{\left(\cos \lambda_1\right)}^{2} \cdot \left(\cos \phi_2 \cdot {\left(\cos \lambda_2\right)}^{2}\right)}{\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \lambda_2}\right) - \frac{{\left(\sin \lambda_1\right)}^{2} \cdot \left(\cos \phi_2 \cdot {\left(\sin \lambda_2\right)}^{2}\right)}{\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \lambda_2}}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r59507 = lambda1;
double r59508 = phi2;
double r59509 = cos(r59508);
double r59510 = lambda2;
double r59511 = r59507 - r59510;
double r59512 = sin(r59511);
double r59513 = r59509 * r59512;
double r59514 = phi1;
double r59515 = cos(r59514);
double r59516 = cos(r59511);
double r59517 = r59509 * r59516;
double r59518 = r59515 + r59517;
double r59519 = atan2(r59513, r59518);
double r59520 = r59507 + r59519;
return r59520;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r59521 = lambda1;
double r59522 = phi2;
double r59523 = cos(r59522);
double r59524 = sin(r59521);
double r59525 = lambda2;
double r59526 = cos(r59525);
double r59527 = r59524 * r59526;
double r59528 = cos(r59521);
double r59529 = -r59525;
double r59530 = sin(r59529);
double r59531 = r59528 * r59530;
double r59532 = r59527 + r59531;
double r59533 = r59523 * r59532;
double r59534 = phi1;
double r59535 = cos(r59534);
double r59536 = 2.0;
double r59537 = pow(r59528, r59536);
double r59538 = pow(r59526, r59536);
double r59539 = r59523 * r59538;
double r59540 = r59537 * r59539;
double r59541 = r59528 * r59526;
double r59542 = sin(r59525);
double r59543 = r59524 * r59542;
double r59544 = r59541 - r59543;
double r59545 = r59540 / r59544;
double r59546 = r59535 + r59545;
double r59547 = pow(r59524, r59536);
double r59548 = pow(r59542, r59536);
double r59549 = r59523 * r59548;
double r59550 = r59547 * r59549;
double r59551 = r59550 / r59544;
double r59552 = r59546 - r59551;
double r59553 = atan2(r59533, r59552);
double r59554 = r59521 + r59553;
return r59554;
}



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 sub-neg0.8
Applied sin-sum0.2
Simplified0.2
rmApplied flip-+0.2
Taylor expanded around inf 0.2
Final simplification0.2
herbie shell --seed 2020027
(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)))))))