\lambda_1 + \tan^{-1}_* \frac{\left(\sin theta \cdot \sin delta\right) \cdot \cos \phi_1}{\cos delta - \sin \phi_1 \cdot \sin \left(\sin^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right)}\lambda_1 + \tan^{-1}_* \frac{\left(\sin theta \cdot \sin delta\right) \cdot \cos \phi_1}{\cos delta - \log \left({\left(e^{\sin \phi_1}\right)}^{\left(\mathsf{expm1}\left(\mathsf{log1p}\left(\cos \left(-\cos^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right)\right)\right)\right)}\right)}double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r109858 = lambda1;
double r109859 = theta;
double r109860 = sin(r109859);
double r109861 = delta;
double r109862 = sin(r109861);
double r109863 = r109860 * r109862;
double r109864 = phi1;
double r109865 = cos(r109864);
double r109866 = r109863 * r109865;
double r109867 = cos(r109861);
double r109868 = sin(r109864);
double r109869 = r109868 * r109867;
double r109870 = r109865 * r109862;
double r109871 = cos(r109859);
double r109872 = r109870 * r109871;
double r109873 = r109869 + r109872;
double r109874 = asin(r109873);
double r109875 = sin(r109874);
double r109876 = r109868 * r109875;
double r109877 = r109867 - r109876;
double r109878 = atan2(r109866, r109877);
double r109879 = r109858 + r109878;
return r109879;
}
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r109880 = lambda1;
double r109881 = theta;
double r109882 = sin(r109881);
double r109883 = delta;
double r109884 = sin(r109883);
double r109885 = r109882 * r109884;
double r109886 = phi1;
double r109887 = cos(r109886);
double r109888 = r109885 * r109887;
double r109889 = cos(r109883);
double r109890 = sin(r109886);
double r109891 = exp(r109890);
double r109892 = r109890 * r109889;
double r109893 = r109887 * r109884;
double r109894 = cos(r109881);
double r109895 = r109893 * r109894;
double r109896 = r109892 + r109895;
double r109897 = acos(r109896);
double r109898 = -r109897;
double r109899 = cos(r109898);
double r109900 = log1p(r109899);
double r109901 = expm1(r109900);
double r109902 = pow(r109891, r109901);
double r109903 = log(r109902);
double r109904 = r109889 - r109903;
double r109905 = atan2(r109888, r109904);
double r109906 = r109880 + r109905;
return r109906;
}



Bits error versus lambda1



Bits error versus phi1



Bits error versus phi2



Bits error versus delta



Bits error versus theta
Results
Initial program 0.2
rmApplied asin-acos0.2
rmApplied add-log-exp0.2
Simplified0.2
rmApplied expm1-log1p-u0.2
Final simplification0.2
herbie shell --seed 2020001 +o rules:numerics
(FPCore (lambda1 phi1 phi2 delta theta)
:name "Destination given bearing on a great circle"
:precision binary64
(+ lambda1 (atan2 (* (* (sin theta) (sin delta)) (cos phi1)) (- (cos delta) (* (sin phi1) (sin (asin (+ (* (sin phi1) (cos delta)) (* (* (cos phi1) (sin delta)) (cos theta))))))))))