\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(\cos \phi_1 \cdot \sin theta\right) \cdot \sin delta}{\left(\cos delta - {\left(\sin \phi_1\right)}^{2} \cdot \cos delta\right) - \left(\sin \phi_1 \cdot \left(\cos theta \cdot \cos \phi_1\right)\right) \cdot \sin delta}double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r110473 = lambda1;
double r110474 = theta;
double r110475 = sin(r110474);
double r110476 = delta;
double r110477 = sin(r110476);
double r110478 = r110475 * r110477;
double r110479 = phi1;
double r110480 = cos(r110479);
double r110481 = r110478 * r110480;
double r110482 = cos(r110476);
double r110483 = sin(r110479);
double r110484 = r110483 * r110482;
double r110485 = r110480 * r110477;
double r110486 = cos(r110474);
double r110487 = r110485 * r110486;
double r110488 = r110484 + r110487;
double r110489 = asin(r110488);
double r110490 = sin(r110489);
double r110491 = r110483 * r110490;
double r110492 = r110482 - r110491;
double r110493 = atan2(r110481, r110492);
double r110494 = r110473 + r110493;
return r110494;
}
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r110495 = lambda1;
double r110496 = phi1;
double r110497 = cos(r110496);
double r110498 = theta;
double r110499 = sin(r110498);
double r110500 = r110497 * r110499;
double r110501 = delta;
double r110502 = sin(r110501);
double r110503 = r110500 * r110502;
double r110504 = cos(r110501);
double r110505 = sin(r110496);
double r110506 = 2.0;
double r110507 = pow(r110505, r110506);
double r110508 = r110507 * r110504;
double r110509 = r110504 - r110508;
double r110510 = cos(r110498);
double r110511 = r110510 * r110497;
double r110512 = r110505 * r110511;
double r110513 = r110512 * r110502;
double r110514 = r110509 - r110513;
double r110515 = atan2(r110503, r110514);
double r110516 = r110495 + r110515;
return r110516;
}



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
Simplified0.2
Taylor expanded around inf 0.1
Simplified0.2
rmApplied add-log-exp0.2
Simplified0.2
Taylor expanded around inf 0.2
Simplified0.1
Final simplification0.1
herbie shell --seed 2019194
(FPCore (lambda1 phi1 phi2 delta theta)
:name "Destination given bearing on a great circle"
(+ lambda1 (atan2 (* (* (sin theta) (sin delta)) (cos phi1)) (- (cos delta) (* (sin phi1) (sin (asin (+ (* (sin phi1) (cos delta)) (* (* (cos phi1) (sin delta)) (cos theta))))))))))