\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 \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \sqrt[3]{{\left(\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}^{3}}\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r113415 = lambda1;
double r113416 = lambda2;
double r113417 = r113415 - r113416;
double r113418 = sin(r113417);
double r113419 = phi2;
double r113420 = cos(r113419);
double r113421 = r113418 * r113420;
double r113422 = phi1;
double r113423 = cos(r113422);
double r113424 = sin(r113419);
double r113425 = r113423 * r113424;
double r113426 = sin(r113422);
double r113427 = r113426 * r113420;
double r113428 = cos(r113417);
double r113429 = r113427 * r113428;
double r113430 = r113425 - r113429;
double r113431 = atan2(r113421, r113430);
return r113431;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r113432 = lambda1;
double r113433 = sin(r113432);
double r113434 = lambda2;
double r113435 = cos(r113434);
double r113436 = r113433 * r113435;
double r113437 = cos(r113432);
double r113438 = sin(r113434);
double r113439 = r113437 * r113438;
double r113440 = r113436 - r113439;
double r113441 = phi2;
double r113442 = cos(r113441);
double r113443 = r113440 * r113442;
double r113444 = phi1;
double r113445 = cos(r113444);
double r113446 = sin(r113441);
double r113447 = r113445 * r113446;
double r113448 = sin(r113444);
double r113449 = r113448 * r113442;
double r113450 = r113437 * r113435;
double r113451 = r113449 * r113450;
double r113452 = r113433 * r113438;
double r113453 = r113449 * r113452;
double r113454 = 3.0;
double r113455 = pow(r113453, r113454);
double r113456 = cbrt(r113455);
double r113457 = r113451 + r113456;
double r113458 = r113447 - r113457;
double r113459 = atan2(r113443, r113458);
return r113459;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 12.9
rmApplied sin-diff6.5
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
rmApplied add-cbrt-cube0.2
Applied add-cbrt-cube0.2
Applied cbrt-unprod0.2
Applied add-cbrt-cube0.2
Applied add-cbrt-cube0.2
Applied cbrt-unprod0.2
Applied cbrt-unprod0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2020059 +o rules:numerics
(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))))))