\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 \lambda_2\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(\sqrt[3]{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)} \cdot \sqrt[3]{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)}\right) \cdot \sqrt[3]{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)}\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r123576 = lambda1;
double r123577 = lambda2;
double r123578 = r123576 - r123577;
double r123579 = sin(r123578);
double r123580 = phi2;
double r123581 = cos(r123580);
double r123582 = r123579 * r123581;
double r123583 = phi1;
double r123584 = cos(r123583);
double r123585 = sin(r123580);
double r123586 = r123584 * r123585;
double r123587 = sin(r123583);
double r123588 = r123587 * r123581;
double r123589 = cos(r123578);
double r123590 = r123588 * r123589;
double r123591 = r123586 - r123590;
double r123592 = atan2(r123582, r123591);
return r123592;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r123593 = lambda1;
double r123594 = sin(r123593);
double r123595 = lambda2;
double r123596 = cos(r123595);
double r123597 = r123594 * r123596;
double r123598 = cos(r123593);
double r123599 = sin(r123595);
double r123600 = r123598 * r123599;
double r123601 = r123597 - r123600;
double r123602 = phi2;
double r123603 = cos(r123602);
double r123604 = r123601 * r123603;
double r123605 = phi1;
double r123606 = cos(r123605);
double r123607 = sin(r123602);
double r123608 = r123606 * r123607;
double r123609 = sin(r123605);
double r123610 = r123609 * r123603;
double r123611 = r123598 * r123596;
double r123612 = r123610 * r123611;
double r123613 = r123594 * r123599;
double r123614 = r123610 * r123613;
double r123615 = cbrt(r123614);
double r123616 = r123615 * r123615;
double r123617 = r123616 * r123615;
double r123618 = r123612 + r123617;
double r123619 = r123608 - r123618;
double r123620 = atan2(r123604, r123619);
return r123620;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.3
rmApplied sin-diff6.8
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
rmApplied add-cube-cbrt0.2
Final simplification0.2
herbie shell --seed 2020036 +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))))))