\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\right)}^{2} - \left({\left(\sin \phi_1\right)}^{3} \cdot \left(\cos \phi_1 \cdot \left(\cos delta \cdot \left(\sin delta \cdot \cos theta\right)\right)\right) + \left({\left(\sin \phi_1\right)}^{2} \cdot \left({\left(\cos \phi_1\right)}^{2} \cdot \left({\left(\cos theta\right)}^{2} \cdot {\left(\sin delta\right)}^{2}\right)\right) + \left(\left(\sqrt{{\left(\sin \phi_1\right)}^{4}} \cdot \sqrt{{\left(\sin \phi_1\right)}^{4}}\right) \cdot {\left(\cos delta\right)}^{2} + {\left(\sin \phi_1\right)}^{3} \cdot \left(\cos \phi_1 \cdot \left(\sin delta \cdot \left(\cos delta \cdot \cos theta\right)\right)\right)\right)\right)\right)}{\left({\left(\sin \phi_1\right)}^{2} + 1\right) \cdot \cos delta + \sin \phi_1 \cdot \left(\cos \phi_1 \cdot \left(\cos theta \cdot \sin delta\right)\right)}}double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r64590 = lambda1;
double r64591 = theta;
double r64592 = sin(r64591);
double r64593 = delta;
double r64594 = sin(r64593);
double r64595 = r64592 * r64594;
double r64596 = phi1;
double r64597 = cos(r64596);
double r64598 = r64595 * r64597;
double r64599 = cos(r64593);
double r64600 = sin(r64596);
double r64601 = r64600 * r64599;
double r64602 = r64597 * r64594;
double r64603 = cos(r64591);
double r64604 = r64602 * r64603;
double r64605 = r64601 + r64604;
double r64606 = asin(r64605);
double r64607 = sin(r64606);
double r64608 = r64600 * r64607;
double r64609 = r64599 - r64608;
double r64610 = atan2(r64598, r64609);
double r64611 = r64590 + r64610;
return r64611;
}
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r64612 = lambda1;
double r64613 = theta;
double r64614 = sin(r64613);
double r64615 = delta;
double r64616 = sin(r64615);
double r64617 = r64614 * r64616;
double r64618 = phi1;
double r64619 = cos(r64618);
double r64620 = r64617 * r64619;
double r64621 = cos(r64615);
double r64622 = 2.0;
double r64623 = pow(r64621, r64622);
double r64624 = sin(r64618);
double r64625 = 3.0;
double r64626 = pow(r64624, r64625);
double r64627 = cos(r64613);
double r64628 = r64616 * r64627;
double r64629 = r64621 * r64628;
double r64630 = r64619 * r64629;
double r64631 = r64626 * r64630;
double r64632 = pow(r64624, r64622);
double r64633 = pow(r64619, r64622);
double r64634 = pow(r64627, r64622);
double r64635 = pow(r64616, r64622);
double r64636 = r64634 * r64635;
double r64637 = r64633 * r64636;
double r64638 = r64632 * r64637;
double r64639 = 4.0;
double r64640 = pow(r64624, r64639);
double r64641 = sqrt(r64640);
double r64642 = r64641 * r64641;
double r64643 = r64642 * r64623;
double r64644 = r64621 * r64627;
double r64645 = r64616 * r64644;
double r64646 = r64619 * r64645;
double r64647 = r64626 * r64646;
double r64648 = r64643 + r64647;
double r64649 = r64638 + r64648;
double r64650 = r64631 + r64649;
double r64651 = r64623 - r64650;
double r64652 = 1.0;
double r64653 = r64632 + r64652;
double r64654 = r64653 * r64621;
double r64655 = r64627 * r64616;
double r64656 = r64619 * r64655;
double r64657 = r64624 * r64656;
double r64658 = r64654 + r64657;
double r64659 = r64651 / r64658;
double r64660 = atan2(r64620, r64659);
double r64661 = r64612 + r64660;
return r64661;
}



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-log-exp0.2
Applied add-log-exp0.2
Applied diff-log0.2
Simplified0.2
rmApplied flip--0.2
Simplified0.2
Simplified0.2
Taylor expanded around -inf 0.2
Simplified0.2
rmApplied add-sqr-sqrt0.2
Final simplification0.2
herbie shell --seed 2019209
(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))))))))))