\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 - \log \left(e^{\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)}\right)}double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r115506 = lambda1;
double r115507 = theta;
double r115508 = sin(r115507);
double r115509 = delta;
double r115510 = sin(r115509);
double r115511 = r115508 * r115510;
double r115512 = phi1;
double r115513 = cos(r115512);
double r115514 = r115511 * r115513;
double r115515 = cos(r115509);
double r115516 = sin(r115512);
double r115517 = r115516 * r115515;
double r115518 = r115513 * r115510;
double r115519 = cos(r115507);
double r115520 = r115518 * r115519;
double r115521 = r115517 + r115520;
double r115522 = asin(r115521);
double r115523 = sin(r115522);
double r115524 = r115516 * r115523;
double r115525 = r115515 - r115524;
double r115526 = atan2(r115514, r115525);
double r115527 = r115506 + r115526;
return r115527;
}
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r115528 = lambda1;
double r115529 = theta;
double r115530 = sin(r115529);
double r115531 = delta;
double r115532 = sin(r115531);
double r115533 = r115530 * r115532;
double r115534 = phi1;
double r115535 = cos(r115534);
double r115536 = r115533 * r115535;
double r115537 = cos(r115531);
double r115538 = sin(r115534);
double r115539 = r115538 * r115537;
double r115540 = r115535 * r115532;
double r115541 = cos(r115529);
double r115542 = r115540 * r115541;
double r115543 = r115539 + r115542;
double r115544 = asin(r115543);
double r115545 = sin(r115544);
double r115546 = r115538 * r115545;
double r115547 = exp(r115546);
double r115548 = log(r115547);
double r115549 = r115537 - r115548;
double r115550 = atan2(r115536, r115549);
double r115551 = r115528 + r115550;
return r115551;
}



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
Final simplification0.2
herbie shell --seed 2020042
(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))))))))))