\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}{\mathsf{expm1}\left(\mathsf{log1p}\left(\mathsf{fma}\left(-\sin \phi_1, \sin \left(\left(\sqrt[3]{\sin^{-1} \left(\mathsf{fma}\left(\sin delta, \cos \phi_1 \cdot \cos theta, \sin \phi_1 \cdot \cos delta\right)\right)} \cdot \sqrt[3]{\sin^{-1} \left(\mathsf{fma}\left(\sin delta, \cos \phi_1 \cdot \cos theta, \sin \phi_1 \cdot \cos delta\right)\right)}\right) \cdot \sqrt[3]{\sin^{-1} \left(\mathsf{fma}\left(\sin delta, \cos \phi_1 \cdot \cos theta, \sin \phi_1 \cdot \cos delta\right)\right)}\right), \cos delta\right)\right)\right)}double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r118297 = lambda1;
double r118298 = theta;
double r118299 = sin(r118298);
double r118300 = delta;
double r118301 = sin(r118300);
double r118302 = r118299 * r118301;
double r118303 = phi1;
double r118304 = cos(r118303);
double r118305 = r118302 * r118304;
double r118306 = cos(r118300);
double r118307 = sin(r118303);
double r118308 = r118307 * r118306;
double r118309 = r118304 * r118301;
double r118310 = cos(r118298);
double r118311 = r118309 * r118310;
double r118312 = r118308 + r118311;
double r118313 = asin(r118312);
double r118314 = sin(r118313);
double r118315 = r118307 * r118314;
double r118316 = r118306 - r118315;
double r118317 = atan2(r118305, r118316);
double r118318 = r118297 + r118317;
return r118318;
}
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r118319 = lambda1;
double r118320 = theta;
double r118321 = sin(r118320);
double r118322 = delta;
double r118323 = sin(r118322);
double r118324 = r118321 * r118323;
double r118325 = phi1;
double r118326 = cos(r118325);
double r118327 = r118324 * r118326;
double r118328 = sin(r118325);
double r118329 = -r118328;
double r118330 = cos(r118320);
double r118331 = r118326 * r118330;
double r118332 = cos(r118322);
double r118333 = r118328 * r118332;
double r118334 = fma(r118323, r118331, r118333);
double r118335 = asin(r118334);
double r118336 = cbrt(r118335);
double r118337 = r118336 * r118336;
double r118338 = r118337 * r118336;
double r118339 = sin(r118338);
double r118340 = fma(r118329, r118339, r118332);
double r118341 = log1p(r118340);
double r118342 = expm1(r118341);
double r118343 = atan2(r118327, r118342);
double r118344 = r118319 + r118343;
return r118344;
}



Bits error versus lambda1



Bits error versus phi1



Bits error versus phi2



Bits error versus delta



Bits error versus theta
Initial program 0.1
rmApplied add-cube-cbrt0.2
Simplified0.2
Simplified0.2
rmApplied expm1-log1p-u0.2
Simplified0.2
rmApplied add-cube-cbrt0.2
Final simplification0.2
herbie shell --seed 2020047 +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))))))))))