\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 + \mathsf{expm1}\left(\mathsf{log1p}\left(\cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r141765 = lambda1;
double r141766 = lambda2;
double r141767 = r141765 - r141766;
double r141768 = sin(r141767);
double r141769 = phi2;
double r141770 = cos(r141769);
double r141771 = r141768 * r141770;
double r141772 = phi1;
double r141773 = cos(r141772);
double r141774 = sin(r141769);
double r141775 = r141773 * r141774;
double r141776 = sin(r141772);
double r141777 = r141776 * r141770;
double r141778 = cos(r141767);
double r141779 = r141777 * r141778;
double r141780 = r141775 - r141779;
double r141781 = atan2(r141771, r141780);
return r141781;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r141782 = lambda1;
double r141783 = sin(r141782);
double r141784 = lambda2;
double r141785 = cos(r141784);
double r141786 = r141783 * r141785;
double r141787 = cos(r141782);
double r141788 = -r141784;
double r141789 = sin(r141788);
double r141790 = r141787 * r141789;
double r141791 = log1p(r141790);
double r141792 = expm1(r141791);
double r141793 = r141786 + r141792;
double r141794 = phi2;
double r141795 = cos(r141794);
double r141796 = r141793 * r141795;
double r141797 = phi1;
double r141798 = cos(r141797);
double r141799 = sin(r141794);
double r141800 = r141798 * r141799;
double r141801 = sin(r141797);
double r141802 = r141801 * r141795;
double r141803 = r141787 * r141785;
double r141804 = r141802 * r141803;
double r141805 = sin(r141784);
double r141806 = r141783 * r141805;
double r141807 = r141802 * r141806;
double r141808 = r141804 + r141807;
double r141809 = r141800 - r141808;
double r141810 = atan2(r141796, r141809);
return r141810;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.1
rmApplied sub-neg13.1
Applied sin-sum6.9
Simplified6.9
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
rmApplied expm1-log1p-u0.2
Final simplification0.2
herbie shell --seed 2019353 +o rules:numerics
(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))))))