\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 - \left(\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \log \left(e^{\left(\sin \lambda_1 \cdot \left(\sqrt[3]{\sin \lambda_2} \cdot \sqrt[3]{\sin \lambda_2}\right)\right) \cdot \sqrt[3]{\sin \lambda_2}}\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r97610 = lambda1;
double r97611 = lambda2;
double r97612 = r97610 - r97611;
double r97613 = sin(r97612);
double r97614 = phi2;
double r97615 = cos(r97614);
double r97616 = r97613 * r97615;
double r97617 = phi1;
double r97618 = cos(r97617);
double r97619 = sin(r97614);
double r97620 = r97618 * r97619;
double r97621 = sin(r97617);
double r97622 = r97621 * r97615;
double r97623 = cos(r97612);
double r97624 = r97622 * r97623;
double r97625 = r97620 - r97624;
double r97626 = atan2(r97616, r97625);
return r97626;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r97627 = lambda1;
double r97628 = sin(r97627);
double r97629 = lambda2;
double r97630 = cos(r97629);
double r97631 = r97628 * r97630;
double r97632 = cos(r97627);
double r97633 = -r97629;
double r97634 = sin(r97633);
double r97635 = r97632 * r97634;
double r97636 = r97631 + r97635;
double r97637 = phi2;
double r97638 = cos(r97637);
double r97639 = r97636 * r97638;
double r97640 = phi1;
double r97641 = cos(r97640);
double r97642 = sin(r97637);
double r97643 = r97641 * r97642;
double r97644 = sin(r97640);
double r97645 = r97644 * r97638;
double r97646 = r97632 * r97630;
double r97647 = r97645 * r97646;
double r97648 = sin(r97629);
double r97649 = cbrt(r97648);
double r97650 = r97649 * r97649;
double r97651 = r97628 * r97650;
double r97652 = r97651 * r97649;
double r97653 = exp(r97652);
double r97654 = log(r97653);
double r97655 = r97645 * r97654;
double r97656 = r97647 + r97655;
double r97657 = r97643 - r97656;
double r97658 = atan2(r97639, r97657);
return r97658;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.1
rmApplied sub-neg13.1
Applied sin-sum6.7
Simplified6.7
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
rmApplied add-log-exp0.2
rmApplied add-cube-cbrt0.2
Applied associate-*r*0.2
Final simplification0.2
herbie shell --seed 2020034 +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))))))