\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(\cos \lambda_2 \cdot \sin \lambda_1 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{\sin \phi_2 \cdot \cos \phi_1 - \left(\left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right) + \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\left(\left(\sqrt[3]{\sin \lambda_2} \cdot \sqrt[3]{\sin \lambda_2}\right) \cdot \sin \lambda_1\right) \cdot \sqrt[3]{\sin \lambda_2}\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r4374647 = lambda1;
double r4374648 = lambda2;
double r4374649 = r4374647 - r4374648;
double r4374650 = sin(r4374649);
double r4374651 = phi2;
double r4374652 = cos(r4374651);
double r4374653 = r4374650 * r4374652;
double r4374654 = phi1;
double r4374655 = cos(r4374654);
double r4374656 = sin(r4374651);
double r4374657 = r4374655 * r4374656;
double r4374658 = sin(r4374654);
double r4374659 = r4374658 * r4374652;
double r4374660 = cos(r4374649);
double r4374661 = r4374659 * r4374660;
double r4374662 = r4374657 - r4374661;
double r4374663 = atan2(r4374653, r4374662);
return r4374663;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r4374664 = lambda2;
double r4374665 = cos(r4374664);
double r4374666 = lambda1;
double r4374667 = sin(r4374666);
double r4374668 = r4374665 * r4374667;
double r4374669 = cos(r4374666);
double r4374670 = sin(r4374664);
double r4374671 = r4374669 * r4374670;
double r4374672 = r4374668 - r4374671;
double r4374673 = phi2;
double r4374674 = cos(r4374673);
double r4374675 = r4374672 * r4374674;
double r4374676 = sin(r4374673);
double r4374677 = phi1;
double r4374678 = cos(r4374677);
double r4374679 = r4374676 * r4374678;
double r4374680 = r4374665 * r4374669;
double r4374681 = sin(r4374677);
double r4374682 = r4374681 * r4374674;
double r4374683 = r4374680 * r4374682;
double r4374684 = cbrt(r4374670);
double r4374685 = r4374684 * r4374684;
double r4374686 = r4374685 * r4374667;
double r4374687 = r4374686 * r4374684;
double r4374688 = r4374682 * r4374687;
double r4374689 = r4374683 + r4374688;
double r4374690 = r4374679 - r4374689;
double r4374691 = atan2(r4374675, r4374690);
return r4374691;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.3
rmApplied sin-diff6.6
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
rmApplied add-cube-cbrt0.2
Applied associate-*r*0.2
Final simplification0.2
herbie shell --seed 2019149 +o rules:numerics
(FPCore (lambda1 lambda2 phi1 phi2)
:name "Bearing on a great circle"
(atan2 (* (sin (- lambda1 lambda2)) (cos phi2)) (- (* (cos phi1) (sin phi2)) (* (* (sin phi1) (cos phi2)) (cos (- lambda1 lambda2))))))