\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 delta, \cos \phi_1 \cdot \cos theta, \sin \phi_1 \cdot \cos delta\right)\right)\right)\right)}^{3}}}double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r98759 = lambda1;
double r98760 = theta;
double r98761 = sin(r98760);
double r98762 = delta;
double r98763 = sin(r98762);
double r98764 = r98761 * r98763;
double r98765 = phi1;
double r98766 = cos(r98765);
double r98767 = r98764 * r98766;
double r98768 = cos(r98762);
double r98769 = sin(r98765);
double r98770 = r98769 * r98768;
double r98771 = r98766 * r98763;
double r98772 = cos(r98760);
double r98773 = r98771 * r98772;
double r98774 = r98770 + r98773;
double r98775 = asin(r98774);
double r98776 = sin(r98775);
double r98777 = r98769 * r98776;
double r98778 = r98768 - r98777;
double r98779 = atan2(r98767, r98778);
double r98780 = r98759 + r98779;
return r98780;
}
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r98781 = lambda1;
double r98782 = theta;
double r98783 = sin(r98782);
double r98784 = delta;
double r98785 = sin(r98784);
double r98786 = r98783 * r98785;
double r98787 = phi1;
double r98788 = cos(r98787);
double r98789 = r98786 * r98788;
double r98790 = cos(r98784);
double r98791 = sin(r98787);
double r98792 = cos(r98782);
double r98793 = r98788 * r98792;
double r98794 = r98791 * r98790;
double r98795 = fma(r98785, r98793, r98794);
double r98796 = asin(r98795);
double r98797 = sin(r98796);
double r98798 = r98791 * r98797;
double r98799 = 3.0;
double r98800 = pow(r98798, r98799);
double r98801 = cbrt(r98800);
double r98802 = r98790 - r98801;
double r98803 = atan2(r98789, r98802);
double r98804 = r98781 + r98803;
return r98804;
}



Bits error versus lambda1



Bits error versus phi1



Bits error versus phi2



Bits error versus delta



Bits error versus theta
Initial program 0.2
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))))))))))