\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(\cos \lambda_2 \cdot \sin \lambda_1 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{\sin \phi_2 \cdot \cos \phi_1 - \left(\sqrt[3]{\left(\left(\left(\sin \lambda_2 \cdot \sin \phi_1\right) \cdot \left(\cos \phi_2 \cdot \sin \lambda_1\right)\right) \cdot \left(\left(\sin \lambda_2 \cdot \sin \phi_1\right) \cdot \left(\cos \phi_2 \cdot \sin \lambda_1\right)\right)\right) \cdot \left(\left(\sin \lambda_2 \cdot \sin \phi_1\right) \cdot \left(\cos \phi_2 \cdot \sin \lambda_1\right)\right)} + \sin \phi_1 \cdot \left(\cos \phi_2 \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right)\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r4420576 = lambda1;
double r4420577 = lambda2;
double r4420578 = r4420576 - r4420577;
double r4420579 = sin(r4420578);
double r4420580 = phi2;
double r4420581 = cos(r4420580);
double r4420582 = r4420579 * r4420581;
double r4420583 = phi1;
double r4420584 = cos(r4420583);
double r4420585 = sin(r4420580);
double r4420586 = r4420584 * r4420585;
double r4420587 = sin(r4420583);
double r4420588 = r4420587 * r4420581;
double r4420589 = cos(r4420578);
double r4420590 = r4420588 * r4420589;
double r4420591 = r4420586 - r4420590;
double r4420592 = atan2(r4420582, r4420591);
return r4420592;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r4420593 = lambda2;
double r4420594 = cos(r4420593);
double r4420595 = lambda1;
double r4420596 = sin(r4420595);
double r4420597 = r4420594 * r4420596;
double r4420598 = cos(r4420595);
double r4420599 = sin(r4420593);
double r4420600 = r4420598 * r4420599;
double r4420601 = r4420597 - r4420600;
double r4420602 = phi2;
double r4420603 = cos(r4420602);
double r4420604 = r4420601 * r4420603;
double r4420605 = sin(r4420602);
double r4420606 = phi1;
double r4420607 = cos(r4420606);
double r4420608 = r4420605 * r4420607;
double r4420609 = sin(r4420606);
double r4420610 = r4420599 * r4420609;
double r4420611 = r4420603 * r4420596;
double r4420612 = r4420610 * r4420611;
double r4420613 = r4420612 * r4420612;
double r4420614 = r4420613 * r4420612;
double r4420615 = cbrt(r4420614);
double r4420616 = r4420594 * r4420598;
double r4420617 = r4420603 * r4420616;
double r4420618 = r4420609 * r4420617;
double r4420619 = r4420615 + r4420618;
double r4420620 = r4420608 - r4420619;
double r4420621 = atan2(r4420604, r4420620);
return r4420621;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.4
rmApplied sin-diff6.9
rmApplied cos-diff0.2
Applied distribute-rgt-in0.2
Taylor expanded around inf 0.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 2019152 +o rules:numerics
(FPCore (lambda1 lambda2 phi1 phi2)
:name "Bearing on a great circle"
(atan2 (* (sin (- lambda1 lambda2)) (cos phi2)) (- (* (cos phi1) (sin phi2)) (* (* (sin phi1) (cos phi2)) (cos (- lambda1 lambda2))))))