\tan^{-1}_* \frac{\sin \left(\lambda_1 - \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \left(\lambda_1 - \lambda_2\right)}\tan^{-1}_* \frac{\left(\sin \lambda_1 \cdot \cos \lambda_2 + \cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\left(\sqrt[3]{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)} \cdot \sqrt[3]{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)}\right) \cdot \sqrt[3]{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)} + \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r111361 = lambda1;
double r111362 = lambda2;
double r111363 = r111361 - r111362;
double r111364 = sin(r111363);
double r111365 = phi2;
double r111366 = cos(r111365);
double r111367 = r111364 * r111366;
double r111368 = phi1;
double r111369 = cos(r111368);
double r111370 = sin(r111365);
double r111371 = r111369 * r111370;
double r111372 = sin(r111368);
double r111373 = r111372 * r111366;
double r111374 = cos(r111363);
double r111375 = r111373 * r111374;
double r111376 = r111371 - r111375;
double r111377 = atan2(r111367, r111376);
return r111377;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r111378 = lambda1;
double r111379 = sin(r111378);
double r111380 = lambda2;
double r111381 = cos(r111380);
double r111382 = r111379 * r111381;
double r111383 = cos(r111378);
double r111384 = -r111380;
double r111385 = sin(r111384);
double r111386 = r111383 * r111385;
double r111387 = r111382 + r111386;
double r111388 = phi2;
double r111389 = cos(r111388);
double r111390 = r111387 * r111389;
double r111391 = phi1;
double r111392 = cos(r111391);
double r111393 = sin(r111388);
double r111394 = r111392 * r111393;
double r111395 = sin(r111391);
double r111396 = r111395 * r111389;
double r111397 = r111383 * r111381;
double r111398 = r111396 * r111397;
double r111399 = cbrt(r111398);
double r111400 = r111399 * r111399;
double r111401 = r111400 * r111399;
double r111402 = sin(r111380);
double r111403 = r111379 * r111402;
double r111404 = r111396 * r111403;
double r111405 = r111401 + r111404;
double r111406 = r111394 - r111405;
double r111407 = atan2(r111390, r111406);
return r111407;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.1
rmApplied sub-neg13.1
Applied sin-sum6.9
Simplified6.9
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
rmApplied add-cube-cbrt0.3
Final simplification0.3
herbie shell --seed 2019353
(FPCore (lambda1 lambda2 phi1 phi2)
:name "Bearing on a great circle"
:precision binary64
(atan2 (* (sin (- lambda1 lambda2)) (cos phi2)) (- (* (cos phi1) (sin phi2)) (* (* (sin phi1) (cos phi2)) (cos (- lambda1 lambda2))))))