\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({\left(\cos delta\right)}^{3} - \mathsf{fma}\left({\left(\sin delta\right)}^{3} \cdot {\left(\cos \phi_1\right)}^{3}, {\left(\cos theta\right)}^{3} \cdot {\left(\sin \phi_1\right)}^{3}, {\left(\sin \phi_1\right)}^{6} \cdot {\left(\cos delta\right)}^{3}\right)\right) - 3 \cdot \mathsf{fma}\left(\cos \phi_1 \cdot \sin delta, {\left(\sin \phi_1\right)}^{5} \cdot \left({\left(\cos delta\right)}^{2} \cdot \cos theta\right), {\left(\sin delta\right)}^{2} \cdot \left({\left(\cos \phi_1\right)}^{2} \cdot \left({\left(\sin \phi_1\right)}^{4} \cdot \left(\cos delta \cdot {\left(\cos theta\right)}^{2}\right)\right)\right)\right)}{\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 r105576 = lambda1;
double r105577 = theta;
double r105578 = sin(r105577);
double r105579 = delta;
double r105580 = sin(r105579);
double r105581 = r105578 * r105580;
double r105582 = phi1;
double r105583 = cos(r105582);
double r105584 = r105581 * r105583;
double r105585 = cos(r105579);
double r105586 = sin(r105582);
double r105587 = r105586 * r105585;
double r105588 = r105583 * r105580;
double r105589 = cos(r105577);
double r105590 = r105588 * r105589;
double r105591 = r105587 + r105590;
double r105592 = asin(r105591);
double r105593 = sin(r105592);
double r105594 = r105586 * r105593;
double r105595 = r105585 - r105594;
double r105596 = atan2(r105584, r105595);
double r105597 = r105576 + r105596;
return r105597;
}
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r105598 = lambda1;
double r105599 = theta;
double r105600 = sin(r105599);
double r105601 = delta;
double r105602 = sin(r105601);
double r105603 = r105600 * r105602;
double r105604 = phi1;
double r105605 = cos(r105604);
double r105606 = r105603 * r105605;
double r105607 = cos(r105601);
double r105608 = 3.0;
double r105609 = pow(r105607, r105608);
double r105610 = pow(r105602, r105608);
double r105611 = pow(r105605, r105608);
double r105612 = r105610 * r105611;
double r105613 = cos(r105599);
double r105614 = pow(r105613, r105608);
double r105615 = sin(r105604);
double r105616 = pow(r105615, r105608);
double r105617 = r105614 * r105616;
double r105618 = 6.0;
double r105619 = pow(r105615, r105618);
double r105620 = r105619 * r105609;
double r105621 = fma(r105612, r105617, r105620);
double r105622 = r105609 - r105621;
double r105623 = r105605 * r105602;
double r105624 = 5.0;
double r105625 = pow(r105615, r105624);
double r105626 = 2.0;
double r105627 = pow(r105607, r105626);
double r105628 = r105627 * r105613;
double r105629 = r105625 * r105628;
double r105630 = pow(r105602, r105626);
double r105631 = pow(r105605, r105626);
double r105632 = 4.0;
double r105633 = pow(r105615, r105632);
double r105634 = pow(r105613, r105626);
double r105635 = r105607 * r105634;
double r105636 = r105633 * r105635;
double r105637 = r105631 * r105636;
double r105638 = r105630 * r105637;
double r105639 = fma(r105623, r105629, r105638);
double r105640 = r105608 * r105639;
double r105641 = r105622 - r105640;
double r105642 = r105615 * r105607;
double r105643 = r105623 * r105613;
double r105644 = r105642 + r105643;
double r105645 = asin(r105644);
double r105646 = sin(r105645);
double r105647 = fma(r105615, r105646, r105607);
double r105648 = r105646 * r105647;
double r105649 = r105615 * r105648;
double r105650 = fma(r105607, r105607, r105649);
double r105651 = r105641 / r105650;
double r105652 = atan2(r105606, r105651);
double r105653 = r105598 + r105652;
return r105653;
}



Bits error versus lambda1



Bits error versus phi1



Bits error versus phi2



Bits error versus delta



Bits error versus theta
Initial program 0.1
rmApplied flip3--0.2
Simplified0.2
rmApplied expm1-log1p-u0.2
Taylor expanded around inf 0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2020036 +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))))))))))