\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 - \frac{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left({\left(\cos \lambda_1 \cdot \cos \lambda_2\right)}^{3} + {\left(\sin \lambda_1 \cdot \sin \lambda_2\right)}^{3}\right)}{\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right) - \left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r114607 = lambda1;
double r114608 = lambda2;
double r114609 = r114607 - r114608;
double r114610 = sin(r114609);
double r114611 = phi2;
double r114612 = cos(r114611);
double r114613 = r114610 * r114612;
double r114614 = phi1;
double r114615 = cos(r114614);
double r114616 = sin(r114611);
double r114617 = r114615 * r114616;
double r114618 = sin(r114614);
double r114619 = r114618 * r114612;
double r114620 = cos(r114609);
double r114621 = r114619 * r114620;
double r114622 = r114617 - r114621;
double r114623 = atan2(r114613, r114622);
return r114623;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r114624 = lambda1;
double r114625 = sin(r114624);
double r114626 = lambda2;
double r114627 = cos(r114626);
double r114628 = r114625 * r114627;
double r114629 = cos(r114624);
double r114630 = sin(r114626);
double r114631 = r114629 * r114630;
double r114632 = r114628 - r114631;
double r114633 = phi2;
double r114634 = cos(r114633);
double r114635 = r114632 * r114634;
double r114636 = phi1;
double r114637 = cos(r114636);
double r114638 = sin(r114633);
double r114639 = r114637 * r114638;
double r114640 = sin(r114636);
double r114641 = r114640 * r114634;
double r114642 = r114629 * r114627;
double r114643 = 3.0;
double r114644 = pow(r114642, r114643);
double r114645 = r114625 * r114630;
double r114646 = pow(r114645, r114643);
double r114647 = r114644 + r114646;
double r114648 = r114641 * r114647;
double r114649 = r114642 * r114642;
double r114650 = r114645 * r114645;
double r114651 = r114642 * r114645;
double r114652 = r114650 - r114651;
double r114653 = r114649 + r114652;
double r114654 = r114648 / r114653;
double r114655 = r114639 - r114654;
double r114656 = atan2(r114635, r114655);
return r114656;
}



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 cos-diff0.2
rmApplied flip3-+0.2
Applied associate-*r/0.2
Final simplification0.2
herbie shell --seed 2020002
(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))))))