\tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}\tan^{-1}_* \frac{\left(\sin \lambda_1 \cdot \cos \lambda_2 + \cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \sqrt[3]{{\left(\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_1 \cdot \sin \lambda_2\right)\right)}^{3}}}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r106587 = lambda1;
double r106588 = lambda2;
double r106589 = r106587 - r106588;
double r106590 = sin(r106589);
double r106591 = phi2;
double r106592 = cos(r106591);
double r106593 = r106590 * r106592;
double r106594 = phi1;
double r106595 = cos(r106594);
double r106596 = sin(r106591);
double r106597 = r106595 * r106596;
double r106598 = sin(r106594);
double r106599 = r106598 * r106592;
double r106600 = cos(r106589);
double r106601 = r106599 * r106600;
double r106602 = r106597 - r106601;
double r106603 = atan2(r106593, r106602);
return r106603;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r106604 = lambda1;
double r106605 = sin(r106604);
double r106606 = lambda2;
double r106607 = cos(r106606);
double r106608 = r106605 * r106607;
double r106609 = cos(r106604);
double r106610 = -r106606;
double r106611 = sin(r106610);
double r106612 = r106609 * r106611;
double r106613 = r106608 + r106612;
double r106614 = phi2;
double r106615 = cos(r106614);
double r106616 = r106613 * r106615;
double r106617 = phi1;
double r106618 = cos(r106617);
double r106619 = sin(r106614);
double r106620 = r106618 * r106619;
double r106621 = sin(r106617);
double r106622 = r106621 * r106615;
double r106623 = sin(r106606);
double r106624 = r106605 * r106623;
double r106625 = fma(r106609, r106607, r106624);
double r106626 = r106622 * r106625;
double r106627 = 3.0;
double r106628 = pow(r106626, r106627);
double r106629 = cbrt(r106628);
double r106630 = r106620 - r106629;
double r106631 = atan2(r106616, r106630);
return r106631;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 13.6
rmApplied sub-neg13.6
Applied sin-sum6.9
Simplified6.9
rmApplied cos-diff0.2
rmApplied add-cbrt-cube0.2
Applied add-cbrt-cube0.2
Applied add-cbrt-cube0.5
Applied cbrt-unprod0.5
Applied cbrt-unprod0.4
Simplified0.4
Final simplification0.4
herbie shell --seed 2020056 +o rules:numerics
(FPCore (lambda1 lambda2 phi1 phi2)
:name "Bearing on a great circle"
:precision binary64
(atan2 (* (sin (- lambda1 lambda2)) (cos phi2)) (- (* (cos phi1) (sin phi2)) (* (* (sin phi1) (cos phi2)) (cos (- lambda1 lambda2))))))