\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({\left(\sqrt[3]{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)}\right)}^{6}\right)}^{\left(\frac{1}{3}\right)} \cdot \sqrt[3]{\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 \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r102952 = lambda1;
double r102953 = lambda2;
double r102954 = r102952 - r102953;
double r102955 = sin(r102954);
double r102956 = phi2;
double r102957 = cos(r102956);
double r102958 = r102955 * r102957;
double r102959 = phi1;
double r102960 = cos(r102959);
double r102961 = sin(r102956);
double r102962 = r102960 * r102961;
double r102963 = sin(r102959);
double r102964 = r102963 * r102957;
double r102965 = cos(r102954);
double r102966 = r102964 * r102965;
double r102967 = r102962 - r102966;
double r102968 = atan2(r102958, r102967);
return r102968;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r102969 = lambda1;
double r102970 = sin(r102969);
double r102971 = lambda2;
double r102972 = cos(r102971);
double r102973 = r102970 * r102972;
double r102974 = cos(r102969);
double r102975 = -r102971;
double r102976 = sin(r102975);
double r102977 = r102974 * r102976;
double r102978 = r102973 + r102977;
double r102979 = phi2;
double r102980 = cos(r102979);
double r102981 = r102978 * r102980;
double r102982 = phi1;
double r102983 = cos(r102982);
double r102984 = sin(r102979);
double r102985 = r102983 * r102984;
double r102986 = sin(r102982);
double r102987 = r102986 * r102980;
double r102988 = r102974 * r102972;
double r102989 = r102987 * r102988;
double r102990 = cbrt(r102989);
double r102991 = 6.0;
double r102992 = pow(r102990, r102991);
double r102993 = 1.0;
double r102994 = 3.0;
double r102995 = r102993 / r102994;
double r102996 = pow(r102992, r102995);
double r102997 = r102996 * r102990;
double r102998 = sin(r102971);
double r102999 = r102970 * r102998;
double r103000 = r102987 * r102999;
double r103001 = r102997 + r103000;
double r103002 = r102985 - r103001;
double r103003 = atan2(r102981, r103002);
return r103003;
}



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.6
Simplified6.6
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
rmApplied add-cube-cbrt0.3
rmApplied pow1/332.6
Applied pow1/332.6
Applied pow-prod-down0.3
Simplified0.4
Final simplification0.4
herbie shell --seed 2019303
(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))))))