\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{\left(\left(-\cos \lambda_1 \cdot \sin \lambda_2\right) + \cos \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2}{\mathsf{fma}\left(\cos \phi_2, \cos \lambda_2 \cdot \cos \lambda_1 - \log \left({\left(e^{-\sin \lambda_1}\right)}^{\left(\sin \lambda_2\right)}\right), \cos \phi_1\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r39610 = lambda1;
double r39611 = phi2;
double r39612 = cos(r39611);
double r39613 = lambda2;
double r39614 = r39610 - r39613;
double r39615 = sin(r39614);
double r39616 = r39612 * r39615;
double r39617 = phi1;
double r39618 = cos(r39617);
double r39619 = cos(r39614);
double r39620 = r39612 * r39619;
double r39621 = r39618 + r39620;
double r39622 = atan2(r39616, r39621);
double r39623 = r39610 + r39622;
return r39623;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r39624 = lambda1;
double r39625 = cos(r39624);
double r39626 = lambda2;
double r39627 = sin(r39626);
double r39628 = r39625 * r39627;
double r39629 = -r39628;
double r39630 = cos(r39626);
double r39631 = sin(r39624);
double r39632 = r39630 * r39631;
double r39633 = r39629 + r39632;
double r39634 = phi2;
double r39635 = cos(r39634);
double r39636 = r39633 * r39635;
double r39637 = r39630 * r39625;
double r39638 = -r39631;
double r39639 = exp(r39638);
double r39640 = pow(r39639, r39627);
double r39641 = log(r39640);
double r39642 = r39637 - r39641;
double r39643 = phi1;
double r39644 = cos(r39643);
double r39645 = fma(r39635, r39642, r39644);
double r39646 = atan2(r39636, r39645);
double r39647 = r39624 + r39646;
return r39647;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 0.9
Simplified0.9
rmApplied sub-neg0.9
Applied cos-sum0.9
Simplified0.9
Simplified0.9
rmApplied sub-neg0.9
Applied sin-sum0.2
Simplified0.2
Simplified0.2
rmApplied add-log-exp0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019194 +o rules:numerics
(FPCore (lambda1 lambda2 phi1 phi2)
:name "Midpoint on a great circle"
(+ lambda1 (atan2 (* (cos phi2) (sin (- lambda1 lambda2))) (+ (cos phi1) (* (cos phi2) (cos (- lambda1 lambda2)))))))