\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 - \left(\sin \phi_1 \cdot \cos delta + \cos \phi_1 \cdot \left(\cos theta \cdot \sin delta\right)\right) \cdot \sin \phi_1}double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r59753 = lambda1;
double r59754 = theta;
double r59755 = sin(r59754);
double r59756 = delta;
double r59757 = sin(r59756);
double r59758 = r59755 * r59757;
double r59759 = phi1;
double r59760 = cos(r59759);
double r59761 = r59758 * r59760;
double r59762 = cos(r59756);
double r59763 = sin(r59759);
double r59764 = r59763 * r59762;
double r59765 = r59760 * r59757;
double r59766 = cos(r59754);
double r59767 = r59765 * r59766;
double r59768 = r59764 + r59767;
double r59769 = asin(r59768);
double r59770 = sin(r59769);
double r59771 = r59763 * r59770;
double r59772 = r59762 - r59771;
double r59773 = atan2(r59761, r59772);
double r59774 = r59753 + r59773;
return r59774;
}
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r59775 = lambda1;
double r59776 = theta;
double r59777 = sin(r59776);
double r59778 = delta;
double r59779 = sin(r59778);
double r59780 = r59777 * r59779;
double r59781 = phi1;
double r59782 = cos(r59781);
double r59783 = r59780 * r59782;
double r59784 = cos(r59778);
double r59785 = sin(r59781);
double r59786 = r59785 * r59784;
double r59787 = cos(r59776);
double r59788 = r59787 * r59779;
double r59789 = r59782 * r59788;
double r59790 = r59786 + r59789;
double r59791 = r59790 * r59785;
double r59792 = r59784 - r59791;
double r59793 = atan2(r59783, r59792);
double r59794 = r59775 + r59793;
return r59794;
}



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
Applied add-cbrt-cube0.2
Applied cbrt-unprod0.2
Simplified0.2
Taylor expanded around inf 0.2
Taylor expanded around inf 0.2
Simplified0.1
Final simplification0.1
herbie shell --seed 2019326
(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))))))))))