\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(\cos \lambda_2 \cdot \sin \lambda_1 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{\sin \phi_2 \cdot \cos \phi_1 - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1 + \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)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r2405990 = lambda1;
double r2405991 = lambda2;
double r2405992 = r2405990 - r2405991;
double r2405993 = sin(r2405992);
double r2405994 = phi2;
double r2405995 = cos(r2405994);
double r2405996 = r2405993 * r2405995;
double r2405997 = phi1;
double r2405998 = cos(r2405997);
double r2405999 = sin(r2405994);
double r2406000 = r2405998 * r2405999;
double r2406001 = sin(r2405997);
double r2406002 = r2406001 * r2405995;
double r2406003 = cos(r2405992);
double r2406004 = r2406002 * r2406003;
double r2406005 = r2406000 - r2406004;
double r2406006 = atan2(r2405996, r2406005);
return r2406006;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r2406007 = lambda2;
double r2406008 = cos(r2406007);
double r2406009 = lambda1;
double r2406010 = sin(r2406009);
double r2406011 = r2406008 * r2406010;
double r2406012 = cos(r2406009);
double r2406013 = sin(r2406007);
double r2406014 = r2406012 * r2406013;
double r2406015 = r2406011 - r2406014;
double r2406016 = phi2;
double r2406017 = cos(r2406016);
double r2406018 = r2406015 * r2406017;
double r2406019 = sin(r2406016);
double r2406020 = phi1;
double r2406021 = cos(r2406020);
double r2406022 = r2406019 * r2406021;
double r2406023 = sin(r2406020);
double r2406024 = r2406023 * r2406017;
double r2406025 = r2406008 * r2406012;
double r2406026 = cbrt(r2406013);
double r2406027 = r2406026 * r2406026;
double r2406028 = r2406010 * r2406027;
double r2406029 = r2406028 * r2406026;
double r2406030 = r2406025 + r2406029;
double r2406031 = r2406024 * r2406030;
double r2406032 = r2406022 - r2406031;
double r2406033 = atan2(r2406018, r2406032);
return r2406033;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 12.7
rmApplied sin-diff6.6
rmApplied cos-diff0.2
rmApplied add-cube-cbrt0.2
Applied associate-*r*0.2
Final simplification0.2
herbie shell --seed 2019156 +o rules:numerics
(FPCore (lambda1 lambda2 phi1 phi2)
:name "Bearing on a great circle"
(atan2 (* (sin (- lambda1 lambda2)) (cos phi2)) (- (* (cos phi1) (sin phi2)) (* (* (sin phi1) (cos phi2)) (cos (- lambda1 lambda2))))))