\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(\mathsf{expm1}\left(\mathsf{log1p}\left(\mathsf{log1p}\left(\mathsf{expm1}\left(\left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)\right)\right)\right)\right) + \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r4682676 = lambda1;
double r4682677 = lambda2;
double r4682678 = r4682676 - r4682677;
double r4682679 = sin(r4682678);
double r4682680 = phi2;
double r4682681 = cos(r4682680);
double r4682682 = r4682679 * r4682681;
double r4682683 = phi1;
double r4682684 = cos(r4682683);
double r4682685 = sin(r4682680);
double r4682686 = r4682684 * r4682685;
double r4682687 = sin(r4682683);
double r4682688 = r4682687 * r4682681;
double r4682689 = cos(r4682678);
double r4682690 = r4682688 * r4682689;
double r4682691 = r4682686 - r4682690;
double r4682692 = atan2(r4682682, r4682691);
return r4682692;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r4682693 = lambda2;
double r4682694 = cos(r4682693);
double r4682695 = lambda1;
double r4682696 = sin(r4682695);
double r4682697 = r4682694 * r4682696;
double r4682698 = cos(r4682695);
double r4682699 = sin(r4682693);
double r4682700 = r4682698 * r4682699;
double r4682701 = r4682697 - r4682700;
double r4682702 = phi2;
double r4682703 = cos(r4682702);
double r4682704 = r4682701 * r4682703;
double r4682705 = sin(r4682702);
double r4682706 = phi1;
double r4682707 = cos(r4682706);
double r4682708 = r4682705 * r4682707;
double r4682709 = r4682694 * r4682698;
double r4682710 = sin(r4682706);
double r4682711 = r4682710 * r4682703;
double r4682712 = r4682709 * r4682711;
double r4682713 = expm1(r4682712);
double r4682714 = log1p(r4682713);
double r4682715 = log1p(r4682714);
double r4682716 = expm1(r4682715);
double r4682717 = r4682699 * r4682696;
double r4682718 = r4682711 * r4682717;
double r4682719 = r4682716 + r4682718;
double r4682720 = r4682708 - r4682719;
double r4682721 = atan2(r4682704, r4682720);
return r4682721;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.2
rmApplied sin-diff6.7
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
rmApplied expm1-log1p-u0.2
rmApplied log1p-expm1-u0.2
Final simplification0.2
herbie shell --seed 2019151 +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))))))