\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 - \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 \left(\left(\sin \lambda_1 \cdot \left(\sqrt[3]{\sin \lambda_2} \cdot \sqrt[3]{\sin \lambda_2}\right)\right) \cdot \sqrt[3]{\sin \lambda_2}\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r120990 = lambda1;
double r120991 = lambda2;
double r120992 = r120990 - r120991;
double r120993 = sin(r120992);
double r120994 = phi2;
double r120995 = cos(r120994);
double r120996 = r120993 * r120995;
double r120997 = phi1;
double r120998 = cos(r120997);
double r120999 = sin(r120994);
double r121000 = r120998 * r120999;
double r121001 = sin(r120997);
double r121002 = r121001 * r120995;
double r121003 = cos(r120992);
double r121004 = r121002 * r121003;
double r121005 = r121000 - r121004;
double r121006 = atan2(r120996, r121005);
return r121006;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r121007 = lambda1;
double r121008 = sin(r121007);
double r121009 = lambda2;
double r121010 = cos(r121009);
double r121011 = r121008 * r121010;
double r121012 = cos(r121007);
double r121013 = sin(r121009);
double r121014 = r121012 * r121013;
double r121015 = r121011 - r121014;
double r121016 = phi2;
double r121017 = cos(r121016);
double r121018 = r121015 * r121017;
double r121019 = phi1;
double r121020 = cos(r121019);
double r121021 = sin(r121016);
double r121022 = r121020 * r121021;
double r121023 = sin(r121019);
double r121024 = r121023 * r121017;
double r121025 = r121012 * r121010;
double r121026 = r121024 * r121025;
double r121027 = cbrt(r121013);
double r121028 = r121027 * r121027;
double r121029 = r121008 * r121028;
double r121030 = r121029 * r121027;
double r121031 = r121024 * r121030;
double r121032 = r121026 + r121031;
double r121033 = r121022 - r121032;
double r121034 = atan2(r121018, r121033);
return r121034;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.0
rmApplied sin-diff6.5
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
rmApplied add-cube-cbrt0.2
Applied associate-*r*0.2
Final simplification0.2
herbie shell --seed 2019294
(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))))))