\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(-\sin \lambda_2 \cdot \cos \lambda_1\right) + \cos \lambda_2 \cdot \sin \lambda_1\right) \cdot \cos \phi_2}{\log \left(e^{\mathsf{fma}\left(\mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_1 \cdot \cos \lambda_2\right), \cos \phi_2, \cos \phi_1\right)}\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r36691 = lambda1;
double r36692 = phi2;
double r36693 = cos(r36692);
double r36694 = lambda2;
double r36695 = r36691 - r36694;
double r36696 = sin(r36695);
double r36697 = r36693 * r36696;
double r36698 = phi1;
double r36699 = cos(r36698);
double r36700 = cos(r36695);
double r36701 = r36693 * r36700;
double r36702 = r36699 + r36701;
double r36703 = atan2(r36697, r36702);
double r36704 = r36691 + r36703;
return r36704;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r36705 = lambda1;
double r36706 = lambda2;
double r36707 = sin(r36706);
double r36708 = cos(r36705);
double r36709 = r36707 * r36708;
double r36710 = -r36709;
double r36711 = cos(r36706);
double r36712 = sin(r36705);
double r36713 = r36711 * r36712;
double r36714 = r36710 + r36713;
double r36715 = phi2;
double r36716 = cos(r36715);
double r36717 = r36714 * r36716;
double r36718 = r36708 * r36711;
double r36719 = fma(r36707, r36712, r36718);
double r36720 = phi1;
double r36721 = cos(r36720);
double r36722 = fma(r36719, r36716, r36721);
double r36723 = exp(r36722);
double r36724 = log(r36723);
double r36725 = atan2(r36717, r36724);
double r36726 = r36705 + r36725;
return r36726;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 0.9
Simplified0.9
rmApplied cos-diff0.9
Simplified0.9
Simplified0.9
rmApplied sub-neg0.9
Applied sin-sum0.2
Simplified0.2
Simplified0.2
rmApplied add-log-exp0.3
Simplified0.3
rmApplied pow10.3
Final simplification0.3
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)))))))