\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{\cos \phi_2 \cdot \left(\cos \lambda_2 \cdot \sin \lambda_1 - \cos \lambda_1 \cdot \sin \lambda_2\right)}{\cos \phi_1 \cdot \sin \phi_2 - \frac{\left(\sin \phi_1 \cdot \mathsf{fma}\left(\sin \lambda_2 \cdot \sin \lambda_1, \left(\sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1\right), \left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right)\right)\right)\right) \cdot \cos \phi_2}{\left(\left(\sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1\right) - \left(\sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right)\right) + \sqrt[3]{\left(\left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right)\right)\right) \cdot \left(\left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right)\right)\right)}}}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r3653683 = lambda1;
double r3653684 = lambda2;
double r3653685 = r3653683 - r3653684;
double r3653686 = sin(r3653685);
double r3653687 = phi2;
double r3653688 = cos(r3653687);
double r3653689 = r3653686 * r3653688;
double r3653690 = phi1;
double r3653691 = cos(r3653690);
double r3653692 = sin(r3653687);
double r3653693 = r3653691 * r3653692;
double r3653694 = sin(r3653690);
double r3653695 = r3653694 * r3653688;
double r3653696 = cos(r3653685);
double r3653697 = r3653695 * r3653696;
double r3653698 = r3653693 - r3653697;
double r3653699 = atan2(r3653689, r3653698);
return r3653699;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r3653700 = phi2;
double r3653701 = cos(r3653700);
double r3653702 = lambda2;
double r3653703 = cos(r3653702);
double r3653704 = lambda1;
double r3653705 = sin(r3653704);
double r3653706 = r3653703 * r3653705;
double r3653707 = cos(r3653704);
double r3653708 = sin(r3653702);
double r3653709 = r3653707 * r3653708;
double r3653710 = r3653706 - r3653709;
double r3653711 = r3653701 * r3653710;
double r3653712 = phi1;
double r3653713 = cos(r3653712);
double r3653714 = sin(r3653700);
double r3653715 = r3653713 * r3653714;
double r3653716 = sin(r3653712);
double r3653717 = r3653708 * r3653705;
double r3653718 = r3653717 * r3653717;
double r3653719 = r3653703 * r3653707;
double r3653720 = r3653719 * r3653719;
double r3653721 = r3653719 * r3653720;
double r3653722 = fma(r3653717, r3653718, r3653721);
double r3653723 = r3653716 * r3653722;
double r3653724 = r3653723 * r3653701;
double r3653725 = r3653717 * r3653719;
double r3653726 = r3653718 - r3653725;
double r3653727 = r3653721 * r3653721;
double r3653728 = cbrt(r3653727);
double r3653729 = r3653726 + r3653728;
double r3653730 = r3653724 / r3653729;
double r3653731 = r3653715 - r3653730;
double r3653732 = atan2(r3653711, r3653731);
return r3653732;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 13.1
rmApplied sin-diff6.7
rmApplied cos-diff0.2
rmApplied flip3-+0.2
Applied associate-*r/0.2
Simplified0.2
rmApplied add-cbrt-cube0.2
Applied add-cbrt-cube0.2
Applied cbrt-unprod0.2
Final simplification0.2
herbie shell --seed 2019200 +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))))))