\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}{\left(\cos \phi_1 \cdot \sin \phi_2 - \cos \lambda_1 \cdot \left(\cos \lambda_2 \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)\right)\right) - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \sqrt[3]{{\left(\sin \lambda_2 \cdot \sin \lambda_1\right)}^{3}}}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r94539 = lambda1;
double r94540 = lambda2;
double r94541 = r94539 - r94540;
double r94542 = sin(r94541);
double r94543 = phi2;
double r94544 = cos(r94543);
double r94545 = r94542 * r94544;
double r94546 = phi1;
double r94547 = cos(r94546);
double r94548 = sin(r94543);
double r94549 = r94547 * r94548;
double r94550 = sin(r94546);
double r94551 = r94550 * r94544;
double r94552 = cos(r94541);
double r94553 = r94551 * r94552;
double r94554 = r94549 - r94553;
double r94555 = atan2(r94545, r94554);
return r94555;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r94556 = lambda1;
double r94557 = sin(r94556);
double r94558 = lambda2;
double r94559 = cos(r94558);
double r94560 = r94557 * r94559;
double r94561 = cos(r94556);
double r94562 = -r94558;
double r94563 = sin(r94562);
double r94564 = r94561 * r94563;
double r94565 = r94560 + r94564;
double r94566 = phi2;
double r94567 = cos(r94566);
double r94568 = r94565 * r94567;
double r94569 = phi1;
double r94570 = cos(r94569);
double r94571 = sin(r94566);
double r94572 = r94570 * r94571;
double r94573 = sin(r94569);
double r94574 = r94573 * r94567;
double r94575 = r94559 * r94574;
double r94576 = r94561 * r94575;
double r94577 = r94572 - r94576;
double r94578 = sin(r94558);
double r94579 = r94578 * r94557;
double r94580 = 3.0;
double r94581 = pow(r94579, r94580);
double r94582 = cbrt(r94581);
double r94583 = r94574 * r94582;
double r94584 = r94577 - r94583;
double r94585 = atan2(r94568, r94584);
return r94585;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.5
rmApplied sub-neg13.5
Applied sin-sum6.9
Simplified6.9
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
Applied associate--r+0.2
Simplified0.2
rmApplied add-cbrt-cube0.2
Applied add-cbrt-cube0.2
Applied cbrt-unprod0.2
Simplified0.2
rmApplied associate-*l*0.2
Final simplification0.2
herbie shell --seed 2019323
(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))))))