\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 r57213 = lambda1;
double r57214 = theta;
double r57215 = sin(r57214);
double r57216 = delta;
double r57217 = sin(r57216);
double r57218 = r57215 * r57217;
double r57219 = phi1;
double r57220 = cos(r57219);
double r57221 = r57218 * r57220;
double r57222 = cos(r57216);
double r57223 = sin(r57219);
double r57224 = r57223 * r57222;
double r57225 = r57220 * r57217;
double r57226 = cos(r57214);
double r57227 = r57225 * r57226;
double r57228 = r57224 + r57227;
double r57229 = asin(r57228);
double r57230 = sin(r57229);
double r57231 = r57223 * r57230;
double r57232 = r57222 - r57231;
double r57233 = atan2(r57221, r57232);
double r57234 = r57213 + r57233;
return r57234;
}
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r57235 = lambda1;
double r57236 = theta;
double r57237 = sin(r57236);
double r57238 = delta;
double r57239 = sin(r57238);
double r57240 = r57237 * r57239;
double r57241 = phi1;
double r57242 = cos(r57241);
double r57243 = r57240 * r57242;
double r57244 = cos(r57238);
double r57245 = sin(r57241);
double r57246 = r57245 * r57244;
double r57247 = r57242 * r57239;
double r57248 = cos(r57236);
double r57249 = r57247 * r57248;
double r57250 = r57246 + r57249;
double r57251 = asin(r57250);
double r57252 = sin(r57251);
double r57253 = r57245 * r57252;
double r57254 = exp(r57253);
double r57255 = log(r57254);
double r57256 = r57244 - r57255;
double r57257 = atan2(r57243, r57256);
double r57258 = r57235 + r57257;
return r57258;
}



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 2019325
(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))))))))))