\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(\left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right) + \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sqrt[3]{\sin \lambda_2 \cdot \sin \lambda_1} \cdot \left(\sqrt[3]{\sin \lambda_2 \cdot \sin \lambda_1} \cdot \sqrt[3]{\sin \lambda_2 \cdot \sin \lambda_1}\right)\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r4281988 = lambda1;
double r4281989 = lambda2;
double r4281990 = r4281988 - r4281989;
double r4281991 = sin(r4281990);
double r4281992 = phi2;
double r4281993 = cos(r4281992);
double r4281994 = r4281991 * r4281993;
double r4281995 = phi1;
double r4281996 = cos(r4281995);
double r4281997 = sin(r4281992);
double r4281998 = r4281996 * r4281997;
double r4281999 = sin(r4281995);
double r4282000 = r4281999 * r4281993;
double r4282001 = cos(r4281990);
double r4282002 = r4282000 * r4282001;
double r4282003 = r4281998 - r4282002;
double r4282004 = atan2(r4281994, r4282003);
return r4282004;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r4282005 = lambda2;
double r4282006 = cos(r4282005);
double r4282007 = lambda1;
double r4282008 = sin(r4282007);
double r4282009 = r4282006 * r4282008;
double r4282010 = cos(r4282007);
double r4282011 = sin(r4282005);
double r4282012 = r4282010 * r4282011;
double r4282013 = r4282009 - r4282012;
double r4282014 = phi2;
double r4282015 = cos(r4282014);
double r4282016 = r4282013 * r4282015;
double r4282017 = sin(r4282014);
double r4282018 = phi1;
double r4282019 = cos(r4282018);
double r4282020 = r4282017 * r4282019;
double r4282021 = r4282006 * r4282010;
double r4282022 = sin(r4282018);
double r4282023 = r4282022 * r4282015;
double r4282024 = r4282021 * r4282023;
double r4282025 = r4282011 * r4282008;
double r4282026 = cbrt(r4282025);
double r4282027 = r4282026 * r4282026;
double r4282028 = r4282026 * r4282027;
double r4282029 = r4282023 * r4282028;
double r4282030 = r4282024 + r4282029;
double r4282031 = r4282020 - r4282030;
double r4282032 = atan2(r4282016, r4282031);
return r4282032;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.3
rmApplied sin-diff6.8
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
rmApplied add-cube-cbrt0.2
Final simplification0.2
herbie shell --seed 2019163 +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))))))