\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(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \sqrt[3]{{\left(\sin \lambda_1 \cdot \sin \lambda_2\right)}^{3}}\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r129918 = lambda1;
double r129919 = lambda2;
double r129920 = r129918 - r129919;
double r129921 = sin(r129920);
double r129922 = phi2;
double r129923 = cos(r129922);
double r129924 = r129921 * r129923;
double r129925 = phi1;
double r129926 = cos(r129925);
double r129927 = sin(r129922);
double r129928 = r129926 * r129927;
double r129929 = sin(r129925);
double r129930 = r129929 * r129923;
double r129931 = cos(r129920);
double r129932 = r129930 * r129931;
double r129933 = r129928 - r129932;
double r129934 = atan2(r129924, r129933);
return r129934;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r129935 = lambda1;
double r129936 = sin(r129935);
double r129937 = lambda2;
double r129938 = cos(r129937);
double r129939 = r129936 * r129938;
double r129940 = cos(r129935);
double r129941 = -r129937;
double r129942 = sin(r129941);
double r129943 = r129940 * r129942;
double r129944 = r129939 + r129943;
double r129945 = phi2;
double r129946 = cos(r129945);
double r129947 = r129944 * r129946;
double r129948 = phi1;
double r129949 = cos(r129948);
double r129950 = sin(r129945);
double r129951 = r129949 * r129950;
double r129952 = sin(r129948);
double r129953 = r129952 * r129946;
double r129954 = r129940 * r129938;
double r129955 = r129953 * r129954;
double r129956 = sin(r129937);
double r129957 = r129936 * r129956;
double r129958 = 3.0;
double r129959 = pow(r129957, r129958);
double r129960 = cbrt(r129959);
double r129961 = r129953 * r129960;
double r129962 = r129955 + r129961;
double r129963 = r129951 - r129962;
double r129964 = atan2(r129947, r129963);
return r129964;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.2
rmApplied sub-neg13.2
Applied sin-sum6.8
Simplified6.8
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
rmApplied add-cbrt-cube0.2
Applied add-cbrt-cube0.2
Applied cbrt-unprod0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019318
(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))))))