\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(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 - \sqrt[3]{{\left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}^{3}}\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r162474 = lambda1;
double r162475 = lambda2;
double r162476 = r162474 - r162475;
double r162477 = sin(r162476);
double r162478 = phi2;
double r162479 = cos(r162478);
double r162480 = r162477 * r162479;
double r162481 = phi1;
double r162482 = cos(r162481);
double r162483 = sin(r162478);
double r162484 = r162482 * r162483;
double r162485 = sin(r162481);
double r162486 = r162485 * r162479;
double r162487 = cos(r162476);
double r162488 = r162486 * r162487;
double r162489 = r162484 - r162488;
double r162490 = atan2(r162480, r162489);
return r162490;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r162491 = lambda1;
double r162492 = sin(r162491);
double r162493 = lambda2;
double r162494 = cos(r162493);
double r162495 = r162492 * r162494;
double r162496 = cos(r162491);
double r162497 = sin(r162493);
double r162498 = r162496 * r162497;
double r162499 = r162495 - r162498;
double r162500 = phi2;
double r162501 = cos(r162500);
double r162502 = r162499 * r162501;
double r162503 = phi1;
double r162504 = cos(r162503);
double r162505 = sin(r162500);
double r162506 = r162504 * r162505;
double r162507 = sin(r162503);
double r162508 = r162507 * r162501;
double r162509 = r162496 * r162494;
double r162510 = -r162493;
double r162511 = sin(r162510);
double r162512 = r162492 * r162511;
double r162513 = 3.0;
double r162514 = pow(r162512, r162513);
double r162515 = cbrt(r162514);
double r162516 = r162509 - r162515;
double r162517 = r162508 * r162516;
double r162518 = r162506 - r162517;
double r162519 = atan2(r162502, r162518);
return r162519;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.6
rmApplied sin-diff6.9
rmApplied sub-neg6.9
Applied cos-sum0.2
Simplified0.2
rmApplied add-cbrt-cube0.2
Applied add-cbrt-cube0.2
Applied cbrt-unprod0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2020064
(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))))))