\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}{\sqrt[3]{{\left(\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)\right)}^{3}}}double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r87763 = lambda1;
double r87764 = theta;
double r87765 = sin(r87764);
double r87766 = delta;
double r87767 = sin(r87766);
double r87768 = r87765 * r87767;
double r87769 = phi1;
double r87770 = cos(r87769);
double r87771 = r87768 * r87770;
double r87772 = cos(r87766);
double r87773 = sin(r87769);
double r87774 = r87773 * r87772;
double r87775 = r87770 * r87767;
double r87776 = cos(r87764);
double r87777 = r87775 * r87776;
double r87778 = r87774 + r87777;
double r87779 = asin(r87778);
double r87780 = sin(r87779);
double r87781 = r87773 * r87780;
double r87782 = r87772 - r87781;
double r87783 = atan2(r87771, r87782);
double r87784 = r87763 + r87783;
return r87784;
}
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r87785 = lambda1;
double r87786 = theta;
double r87787 = sin(r87786);
double r87788 = delta;
double r87789 = sin(r87788);
double r87790 = r87787 * r87789;
double r87791 = phi1;
double r87792 = cos(r87791);
double r87793 = r87790 * r87792;
double r87794 = cos(r87788);
double r87795 = sin(r87791);
double r87796 = r87795 * r87794;
double r87797 = r87792 * r87789;
double r87798 = cos(r87786);
double r87799 = r87797 * r87798;
double r87800 = r87796 + r87799;
double r87801 = asin(r87800);
double r87802 = sin(r87801);
double r87803 = r87795 * r87802;
double r87804 = r87794 - r87803;
double r87805 = 3.0;
double r87806 = pow(r87804, r87805);
double r87807 = cbrt(r87806);
double r87808 = atan2(r87793, r87807);
double r87809 = r87785 + r87808;
return r87809;
}



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 add-cbrt-cube0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019351
(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))))))))))