\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(\left(\mathsf{fma}\left(\sin \lambda_1, \cos \lambda_2, \cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \sqrt[3]{\cos \phi_2}\right) \cdot \sqrt[3]{\cos \phi_2}\right) \cdot \sqrt[3]{\cos \phi_2}}{\cos \phi_1 \cdot \sin \phi_2 - \frac{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left({\left(\cos \lambda_1 \cdot \cos \lambda_2\right)}^{3} - {\left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}^{3}\right)}{\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) + \left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)}}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r144893 = lambda1;
double r144894 = lambda2;
double r144895 = r144893 - r144894;
double r144896 = sin(r144895);
double r144897 = phi2;
double r144898 = cos(r144897);
double r144899 = r144896 * r144898;
double r144900 = phi1;
double r144901 = cos(r144900);
double r144902 = sin(r144897);
double r144903 = r144901 * r144902;
double r144904 = sin(r144900);
double r144905 = r144904 * r144898;
double r144906 = cos(r144895);
double r144907 = r144905 * r144906;
double r144908 = r144903 - r144907;
double r144909 = atan2(r144899, r144908);
return r144909;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r144910 = lambda1;
double r144911 = sin(r144910);
double r144912 = lambda2;
double r144913 = cos(r144912);
double r144914 = cos(r144910);
double r144915 = -r144912;
double r144916 = sin(r144915);
double r144917 = r144914 * r144916;
double r144918 = fma(r144911, r144913, r144917);
double r144919 = phi2;
double r144920 = cos(r144919);
double r144921 = cbrt(r144920);
double r144922 = r144918 * r144921;
double r144923 = r144922 * r144921;
double r144924 = r144923 * r144921;
double r144925 = phi1;
double r144926 = cos(r144925);
double r144927 = sin(r144919);
double r144928 = r144926 * r144927;
double r144929 = sin(r144925);
double r144930 = r144929 * r144920;
double r144931 = r144914 * r144913;
double r144932 = 3.0;
double r144933 = pow(r144931, r144932);
double r144934 = r144911 * r144916;
double r144935 = pow(r144934, r144932);
double r144936 = r144933 - r144935;
double r144937 = r144930 * r144936;
double r144938 = r144931 * r144931;
double r144939 = r144934 * r144934;
double r144940 = r144931 * r144934;
double r144941 = r144939 + r144940;
double r144942 = r144938 + r144941;
double r144943 = r144937 / r144942;
double r144944 = r144928 - r144943;
double r144945 = atan2(r144924, r144944);
return r144945;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 13.1
rmApplied sub-neg13.1
Applied sin-sum6.8
Simplified6.8
rmApplied sub-neg6.8
Applied cos-sum0.2
Simplified0.2
rmApplied add-cube-cbrt0.4
Applied associate-*r*0.4
Simplified0.4
rmApplied flip3--0.4
Applied associate-*r/0.4
Final simplification0.4
herbie shell --seed 2020089 +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))))))