\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 \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \frac{\sin \phi_1 \cdot \cos \phi_2}{\sqrt{\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 \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right) - \left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}} \cdot \frac{{\left(\cos \lambda_1 \cdot \cos \lambda_2\right)}^{3} + {\left(\sin \lambda_1 \cdot \sin \lambda_2\right)}^{3}}{\sqrt{\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 \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right) - \left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}}}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r122987 = lambda1;
double r122988 = lambda2;
double r122989 = r122987 - r122988;
double r122990 = sin(r122989);
double r122991 = phi2;
double r122992 = cos(r122991);
double r122993 = r122990 * r122992;
double r122994 = phi1;
double r122995 = cos(r122994);
double r122996 = sin(r122991);
double r122997 = r122995 * r122996;
double r122998 = sin(r122994);
double r122999 = r122998 * r122992;
double r123000 = cos(r122989);
double r123001 = r122999 * r123000;
double r123002 = r122997 - r123001;
double r123003 = atan2(r122993, r123002);
return r123003;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r123004 = lambda1;
double r123005 = sin(r123004);
double r123006 = lambda2;
double r123007 = cos(r123006);
double r123008 = r123005 * r123007;
double r123009 = cos(r123004);
double r123010 = sin(r123006);
double r123011 = r123009 * r123010;
double r123012 = r123008 - r123011;
double r123013 = phi2;
double r123014 = cos(r123013);
double r123015 = r123012 * r123014;
double r123016 = phi1;
double r123017 = cos(r123016);
double r123018 = sin(r123013);
double r123019 = r123017 * r123018;
double r123020 = sin(r123016);
double r123021 = r123020 * r123014;
double r123022 = r123009 * r123007;
double r123023 = r123022 * r123022;
double r123024 = r123005 * r123010;
double r123025 = r123024 * r123024;
double r123026 = r123022 * r123024;
double r123027 = r123025 - r123026;
double r123028 = r123023 + r123027;
double r123029 = sqrt(r123028);
double r123030 = r123021 / r123029;
double r123031 = 3.0;
double r123032 = pow(r123022, r123031);
double r123033 = pow(r123024, r123031);
double r123034 = r123032 + r123033;
double r123035 = r123034 / r123029;
double r123036 = r123030 * r123035;
double r123037 = r123019 - r123036;
double r123038 = atan2(r123015, r123037);
return r123038;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.5
rmApplied sin-diff6.9
rmApplied cos-diff0.2
rmApplied flip3-+0.2
Applied associate-*r/0.2
rmApplied add-sqr-sqrt0.2
Applied times-frac0.2
Final simplification0.2
herbie shell --seed 2020057
(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))))))