\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}{\sqrt[3]{\left(\sin \phi_2 \cdot \cos \phi_1\right) \cdot \left(\left(\sin \phi_2 \cdot \cos \phi_1\right) \cdot \left(\sin \phi_2 \cdot \cos \phi_1\right)\right)} - \left(\sin \lambda_2 \cdot \sin \lambda_1 + \cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\cos \phi_2 \cdot \sin \phi_1\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r5062777 = lambda1;
double r5062778 = lambda2;
double r5062779 = r5062777 - r5062778;
double r5062780 = sin(r5062779);
double r5062781 = phi2;
double r5062782 = cos(r5062781);
double r5062783 = r5062780 * r5062782;
double r5062784 = phi1;
double r5062785 = cos(r5062784);
double r5062786 = sin(r5062781);
double r5062787 = r5062785 * r5062786;
double r5062788 = sin(r5062784);
double r5062789 = r5062788 * r5062782;
double r5062790 = cos(r5062779);
double r5062791 = r5062789 * r5062790;
double r5062792 = r5062787 - r5062791;
double r5062793 = atan2(r5062783, r5062792);
return r5062793;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r5062794 = lambda2;
double r5062795 = cos(r5062794);
double r5062796 = lambda1;
double r5062797 = sin(r5062796);
double r5062798 = r5062795 * r5062797;
double r5062799 = cos(r5062796);
double r5062800 = sin(r5062794);
double r5062801 = r5062799 * r5062800;
double r5062802 = r5062798 - r5062801;
double r5062803 = phi2;
double r5062804 = cos(r5062803);
double r5062805 = r5062802 * r5062804;
double r5062806 = sin(r5062803);
double r5062807 = phi1;
double r5062808 = cos(r5062807);
double r5062809 = r5062806 * r5062808;
double r5062810 = r5062809 * r5062809;
double r5062811 = r5062809 * r5062810;
double r5062812 = cbrt(r5062811);
double r5062813 = r5062800 * r5062797;
double r5062814 = r5062795 * r5062799;
double r5062815 = r5062813 + r5062814;
double r5062816 = sin(r5062807);
double r5062817 = r5062804 * r5062816;
double r5062818 = r5062815 * r5062817;
double r5062819 = r5062812 - r5062818;
double r5062820 = atan2(r5062805, r5062819);
return r5062820;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 12.8
rmApplied sin-diff6.6
rmApplied cos-diff0.2
rmApplied add-cbrt-cube0.4
Final simplification0.4
herbie shell --seed 2019158
(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))))))