\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}{\log \left(e^{\cos delta - \sin \left(\sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \cos delta, \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right)\right) \cdot \sin \phi_1}\right)}double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r69545 = lambda1;
double r69546 = theta;
double r69547 = sin(r69546);
double r69548 = delta;
double r69549 = sin(r69548);
double r69550 = r69547 * r69549;
double r69551 = phi1;
double r69552 = cos(r69551);
double r69553 = r69550 * r69552;
double r69554 = cos(r69548);
double r69555 = sin(r69551);
double r69556 = r69555 * r69554;
double r69557 = r69552 * r69549;
double r69558 = cos(r69546);
double r69559 = r69557 * r69558;
double r69560 = r69556 + r69559;
double r69561 = asin(r69560);
double r69562 = sin(r69561);
double r69563 = r69555 * r69562;
double r69564 = r69554 - r69563;
double r69565 = atan2(r69553, r69564);
double r69566 = r69545 + r69565;
return r69566;
}
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r69567 = lambda1;
double r69568 = theta;
double r69569 = sin(r69568);
double r69570 = delta;
double r69571 = sin(r69570);
double r69572 = r69569 * r69571;
double r69573 = phi1;
double r69574 = cos(r69573);
double r69575 = r69572 * r69574;
double r69576 = cos(r69570);
double r69577 = sin(r69573);
double r69578 = r69574 * r69571;
double r69579 = cos(r69568);
double r69580 = r69578 * r69579;
double r69581 = fma(r69577, r69576, r69580);
double r69582 = asin(r69581);
double r69583 = sin(r69582);
double r69584 = r69583 * r69577;
double r69585 = r69576 - r69584;
double r69586 = exp(r69585);
double r69587 = log(r69586);
double r69588 = atan2(r69575, r69587);
double r69589 = r69567 + r69588;
return r69589;
}



Bits error versus lambda1



Bits error versus phi1



Bits error versus phi2



Bits error versus delta



Bits error versus theta
Initial program 0.2
Simplified0.2
rmApplied add-log-exp0.2
Applied add-log-exp0.2
Applied diff-log0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019323 +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))))))))))