\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(\left(\sin \phi_1 \cdot \left(\sqrt[3]{\cos \phi_2} \cdot \sqrt[3]{\cos \phi_2}\right)\right) \cdot \sqrt[3]{\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 r112795 = lambda1;
double r112796 = lambda2;
double r112797 = r112795 - r112796;
double r112798 = sin(r112797);
double r112799 = phi2;
double r112800 = cos(r112799);
double r112801 = r112798 * r112800;
double r112802 = phi1;
double r112803 = cos(r112802);
double r112804 = sin(r112799);
double r112805 = r112803 * r112804;
double r112806 = sin(r112802);
double r112807 = r112806 * r112800;
double r112808 = cos(r112797);
double r112809 = r112807 * r112808;
double r112810 = r112805 - r112809;
double r112811 = atan2(r112801, r112810);
return r112811;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r112812 = lambda1;
double r112813 = sin(r112812);
double r112814 = lambda2;
double r112815 = cos(r112814);
double r112816 = r112813 * r112815;
double r112817 = cos(r112812);
double r112818 = -r112814;
double r112819 = sin(r112818);
double r112820 = r112817 * r112819;
double r112821 = r112816 + r112820;
double r112822 = phi2;
double r112823 = cos(r112822);
double r112824 = r112821 * r112823;
double r112825 = phi1;
double r112826 = cos(r112825);
double r112827 = sin(r112822);
double r112828 = r112826 * r112827;
double r112829 = sin(r112825);
double r112830 = r112829 * r112823;
double r112831 = r112817 * r112815;
double r112832 = r112830 * r112831;
double r112833 = cbrt(r112823);
double r112834 = r112833 * r112833;
double r112835 = r112829 * r112834;
double r112836 = r112835 * r112833;
double r112837 = sin(r112814);
double r112838 = r112813 * r112837;
double r112839 = r112836 * r112838;
double r112840 = r112832 + r112839;
double r112841 = r112828 - r112840;
double r112842 = atan2(r112824, r112841);
return r112842;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.0
rmApplied sub-neg13.0
Applied sin-sum6.7
Simplified6.7
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 2020020 +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))))))