\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 - \sin \phi_1 \cdot \log \left(e^{\sin \left(\log \left(e^{\sin^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)}\right)\right)}\right)}double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r84285 = lambda1;
double r84286 = theta;
double r84287 = sin(r84286);
double r84288 = delta;
double r84289 = sin(r84288);
double r84290 = r84287 * r84289;
double r84291 = phi1;
double r84292 = cos(r84291);
double r84293 = r84290 * r84292;
double r84294 = cos(r84288);
double r84295 = sin(r84291);
double r84296 = r84295 * r84294;
double r84297 = r84292 * r84289;
double r84298 = cos(r84286);
double r84299 = r84297 * r84298;
double r84300 = r84296 + r84299;
double r84301 = asin(r84300);
double r84302 = sin(r84301);
double r84303 = r84295 * r84302;
double r84304 = r84294 - r84303;
double r84305 = atan2(r84293, r84304);
double r84306 = r84285 + r84305;
return r84306;
}
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r84307 = lambda1;
double r84308 = theta;
double r84309 = sin(r84308);
double r84310 = delta;
double r84311 = sin(r84310);
double r84312 = r84309 * r84311;
double r84313 = phi1;
double r84314 = cos(r84313);
double r84315 = r84312 * r84314;
double r84316 = cos(r84310);
double r84317 = sin(r84313);
double r84318 = r84317 * r84316;
double r84319 = r84314 * r84311;
double r84320 = cos(r84308);
double r84321 = r84319 * r84320;
double r84322 = r84318 + r84321;
double r84323 = asin(r84322);
double r84324 = exp(r84323);
double r84325 = log(r84324);
double r84326 = sin(r84325);
double r84327 = exp(r84326);
double r84328 = log(r84327);
double r84329 = r84317 * r84328;
double r84330 = r84316 - r84329;
double r84331 = atan2(r84315, r84330);
double r84332 = r84307 + r84331;
return r84332;
}



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
rmApplied add-log-exp0.2
Final simplification0.2
herbie shell --seed 2019350
(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))))))))))