\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}{\frac{\left(\cos delta \cdot \cos delta\right) \cdot \cos delta - {\left(\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)\right)}^{3}}{\mathsf{fma}\left(\cos delta, \cos delta, \sin \phi_1 \cdot \left(\sin \left(\sin^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right) \cdot \mathsf{fma}\left(\sin \phi_1, \sin \left(\sin^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right), \cos delta\right)\right)\right)}}double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r108785 = lambda1;
double r108786 = theta;
double r108787 = sin(r108786);
double r108788 = delta;
double r108789 = sin(r108788);
double r108790 = r108787 * r108789;
double r108791 = phi1;
double r108792 = cos(r108791);
double r108793 = r108790 * r108792;
double r108794 = cos(r108788);
double r108795 = sin(r108791);
double r108796 = r108795 * r108794;
double r108797 = r108792 * r108789;
double r108798 = cos(r108786);
double r108799 = r108797 * r108798;
double r108800 = r108796 + r108799;
double r108801 = asin(r108800);
double r108802 = sin(r108801);
double r108803 = r108795 * r108802;
double r108804 = r108794 - r108803;
double r108805 = atan2(r108793, r108804);
double r108806 = r108785 + r108805;
return r108806;
}
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r108807 = lambda1;
double r108808 = theta;
double r108809 = sin(r108808);
double r108810 = delta;
double r108811 = sin(r108810);
double r108812 = r108809 * r108811;
double r108813 = phi1;
double r108814 = cos(r108813);
double r108815 = r108812 * r108814;
double r108816 = cos(r108810);
double r108817 = r108816 * r108816;
double r108818 = r108817 * r108816;
double r108819 = sin(r108813);
double r108820 = r108819 * r108816;
double r108821 = r108814 * r108811;
double r108822 = cos(r108808);
double r108823 = r108821 * r108822;
double r108824 = r108820 + r108823;
double r108825 = asin(r108824);
double r108826 = sin(r108825);
double r108827 = r108819 * r108826;
double r108828 = 3.0;
double r108829 = pow(r108827, r108828);
double r108830 = r108818 - r108829;
double r108831 = fma(r108819, r108826, r108816);
double r108832 = r108826 * r108831;
double r108833 = r108819 * r108832;
double r108834 = fma(r108816, r108816, r108833);
double r108835 = r108830 / r108834;
double r108836 = atan2(r108815, r108835);
double r108837 = r108807 + r108836;
return r108837;
}



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 flip3--0.2
Simplified0.2
rmApplied add-cbrt-cube0.2
Applied rem-cube-cbrt0.2
Final simplification0.2
herbie shell --seed 2020018 +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))))))))))