\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 - \sqrt[3]{{\left(\sin \phi_1 \cdot \sin \left(\sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \cos delta, \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right)\right)\right)}^{3}}}double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r93848 = lambda1;
double r93849 = theta;
double r93850 = sin(r93849);
double r93851 = delta;
double r93852 = sin(r93851);
double r93853 = r93850 * r93852;
double r93854 = phi1;
double r93855 = cos(r93854);
double r93856 = r93853 * r93855;
double r93857 = cos(r93851);
double r93858 = sin(r93854);
double r93859 = r93858 * r93857;
double r93860 = r93855 * r93852;
double r93861 = cos(r93849);
double r93862 = r93860 * r93861;
double r93863 = r93859 + r93862;
double r93864 = asin(r93863);
double r93865 = sin(r93864);
double r93866 = r93858 * r93865;
double r93867 = r93857 - r93866;
double r93868 = atan2(r93856, r93867);
double r93869 = r93848 + r93868;
return r93869;
}
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r93870 = lambda1;
double r93871 = theta;
double r93872 = sin(r93871);
double r93873 = delta;
double r93874 = sin(r93873);
double r93875 = r93872 * r93874;
double r93876 = phi1;
double r93877 = cos(r93876);
double r93878 = r93875 * r93877;
double r93879 = cos(r93873);
double r93880 = sin(r93876);
double r93881 = r93877 * r93874;
double r93882 = cos(r93871);
double r93883 = r93881 * r93882;
double r93884 = fma(r93880, r93879, r93883);
double r93885 = asin(r93884);
double r93886 = sin(r93885);
double r93887 = r93880 * r93886;
double r93888 = 3.0;
double r93889 = pow(r93887, r93888);
double r93890 = cbrt(r93889);
double r93891 = r93879 - r93890;
double r93892 = atan2(r93878, r93891);
double r93893 = r93870 + r93892;
return r93893;
}



Bits error versus lambda1



Bits error versus phi1



Bits error versus phi2



Bits error versus delta



Bits error versus theta
Initial program 0.2
Simplified0.1
rmApplied add-cbrt-cube0.2
Applied add-cbrt-cube0.2
Applied cbrt-unprod0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019326 +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))))))))))