\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 \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 r82461 = lambda1;
double r82462 = theta;
double r82463 = sin(r82462);
double r82464 = delta;
double r82465 = sin(r82464);
double r82466 = r82463 * r82465;
double r82467 = phi1;
double r82468 = cos(r82467);
double r82469 = r82466 * r82468;
double r82470 = cos(r82464);
double r82471 = sin(r82467);
double r82472 = r82471 * r82470;
double r82473 = r82468 * r82465;
double r82474 = cos(r82462);
double r82475 = r82473 * r82474;
double r82476 = r82472 + r82475;
double r82477 = asin(r82476);
double r82478 = sin(r82477);
double r82479 = r82471 * r82478;
double r82480 = r82470 - r82479;
double r82481 = atan2(r82469, r82480);
double r82482 = r82461 + r82481;
return r82482;
}
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r82483 = lambda1;
double r82484 = theta;
double r82485 = sin(r82484);
double r82486 = delta;
double r82487 = sin(r82486);
double r82488 = r82485 * r82487;
double r82489 = phi1;
double r82490 = cos(r82489);
double r82491 = r82488 * r82490;
double r82492 = cos(r82486);
double r82493 = sin(r82489);
double r82494 = r82493 * r82492;
double r82495 = r82490 * r82487;
double r82496 = cos(r82484);
double r82497 = r82495 * r82496;
double r82498 = r82494 + r82497;
double r82499 = asin(r82498);
double r82500 = sin(r82499);
double r82501 = r82493 * r82500;
double r82502 = r82492 - r82501;
double r82503 = exp(r82502);
double r82504 = log(r82503);
double r82505 = atan2(r82491, r82504);
double r82506 = r82483 + r82505;
return r82506;
}



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