\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)}{\frac{\left(3 \cdot \left(\sin \lambda_1 \cdot \left({\left(\cos \phi_2\right)}^{3} \cdot \left(\sin \lambda_2 \cdot \left({\left(\cos \lambda_1\right)}^{2} \cdot {\left(\cos \lambda_2\right)}^{2}\right)\right)\right)\right) + \left({\left(\cos \phi_2\right)}^{3} \cdot {\left(\sin \lambda_1 \cdot \sin \lambda_2\right)}^{3} + {\left(\cos \phi_1\right)}^{3}\right)\right) + \left({\left(\cos \lambda_1 \cdot \cos \lambda_2\right)}^{3} \cdot {\left(\cos \phi_2\right)}^{3} + 3 \cdot \left(\cos \lambda_1 \cdot \left({\left(\cos \phi_2\right)}^{3} \cdot \left({\left(\sin \lambda_2\right)}^{2} \cdot \left({\left(\sin \lambda_1\right)}^{2} \cdot \cos \lambda_2\right)\right)\right)\right)\right)}{\left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right)\right) \cdot \left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \lambda_2\right) - \cos \phi_1\right) + \cos \phi_1 \cdot \cos \phi_1}}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r63483 = lambda1;
double r63484 = phi2;
double r63485 = cos(r63484);
double r63486 = lambda2;
double r63487 = r63483 - r63486;
double r63488 = sin(r63487);
double r63489 = r63485 * r63488;
double r63490 = phi1;
double r63491 = cos(r63490);
double r63492 = cos(r63487);
double r63493 = r63485 * r63492;
double r63494 = r63491 + r63493;
double r63495 = atan2(r63489, r63494);
double r63496 = r63483 + r63495;
return r63496;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r63497 = lambda1;
double r63498 = phi2;
double r63499 = cos(r63498);
double r63500 = sin(r63497);
double r63501 = lambda2;
double r63502 = cos(r63501);
double r63503 = r63500 * r63502;
double r63504 = cos(r63497);
double r63505 = sin(r63501);
double r63506 = r63504 * r63505;
double r63507 = r63503 - r63506;
double r63508 = r63499 * r63507;
double r63509 = 3.0;
double r63510 = pow(r63499, r63509);
double r63511 = 2.0;
double r63512 = pow(r63504, r63511);
double r63513 = pow(r63502, r63511);
double r63514 = r63512 * r63513;
double r63515 = r63505 * r63514;
double r63516 = r63510 * r63515;
double r63517 = r63500 * r63516;
double r63518 = r63509 * r63517;
double r63519 = r63500 * r63505;
double r63520 = pow(r63519, r63509);
double r63521 = r63510 * r63520;
double r63522 = phi1;
double r63523 = cos(r63522);
double r63524 = pow(r63523, r63509);
double r63525 = r63521 + r63524;
double r63526 = r63518 + r63525;
double r63527 = r63504 * r63502;
double r63528 = pow(r63527, r63509);
double r63529 = r63528 * r63510;
double r63530 = pow(r63505, r63511);
double r63531 = pow(r63500, r63511);
double r63532 = r63531 * r63502;
double r63533 = r63530 * r63532;
double r63534 = r63510 * r63533;
double r63535 = r63504 * r63534;
double r63536 = r63509 * r63535;
double r63537 = r63529 + r63536;
double r63538 = r63526 + r63537;
double r63539 = r63527 + r63519;
double r63540 = r63499 * r63539;
double r63541 = r63540 - r63523;
double r63542 = r63540 * r63541;
double r63543 = r63523 * r63523;
double r63544 = r63542 + r63543;
double r63545 = r63538 / r63544;
double r63546 = atan2(r63508, r63545);
double r63547 = r63497 + r63546;
return r63547;
}



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 sin-diff0.2
rmApplied flip3-+0.3
Simplified0.3
Taylor expanded around -inf 0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019323
(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)))))))