\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\right) \cdot \sin \left(\sqrt[3]{{\left(\sin^{-1} \left(\sin delta \cdot \left(\cos \phi_1 \cdot \cos theta\right) + \sin \phi_1 \cdot \cos delta\right)\right)}^{3}}\right)}double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r67659 = lambda1;
double r67660 = theta;
double r67661 = sin(r67660);
double r67662 = delta;
double r67663 = sin(r67662);
double r67664 = r67661 * r67663;
double r67665 = phi1;
double r67666 = cos(r67665);
double r67667 = r67664 * r67666;
double r67668 = cos(r67662);
double r67669 = sin(r67665);
double r67670 = r67669 * r67668;
double r67671 = r67666 * r67663;
double r67672 = cos(r67660);
double r67673 = r67671 * r67672;
double r67674 = r67670 + r67673;
double r67675 = asin(r67674);
double r67676 = sin(r67675);
double r67677 = r67669 * r67676;
double r67678 = r67668 - r67677;
double r67679 = atan2(r67667, r67678);
double r67680 = r67659 + r67679;
return r67680;
}
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r67681 = lambda1;
double r67682 = theta;
double r67683 = sin(r67682);
double r67684 = delta;
double r67685 = sin(r67684);
double r67686 = r67683 * r67685;
double r67687 = phi1;
double r67688 = cos(r67687);
double r67689 = r67686 * r67688;
double r67690 = cos(r67684);
double r67691 = sin(r67687);
double r67692 = -r67691;
double r67693 = cos(r67682);
double r67694 = r67688 * r67693;
double r67695 = r67685 * r67694;
double r67696 = r67691 * r67690;
double r67697 = r67695 + r67696;
double r67698 = asin(r67697);
double r67699 = 3.0;
double r67700 = pow(r67698, r67699);
double r67701 = cbrt(r67700);
double r67702 = sin(r67701);
double r67703 = r67692 * r67702;
double r67704 = r67690 + r67703;
double r67705 = atan2(r67689, r67704);
double r67706 = r67681 + r67705;
return r67706;
}



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
rmApplied expm1-log1p-u0.2
rmApplied sub-neg0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2020039 +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))))))))))