\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 - \left(\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \log \left(e^{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)}\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r113741 = lambda1;
double r113742 = lambda2;
double r113743 = r113741 - r113742;
double r113744 = sin(r113743);
double r113745 = phi2;
double r113746 = cos(r113745);
double r113747 = r113744 * r113746;
double r113748 = phi1;
double r113749 = cos(r113748);
double r113750 = sin(r113745);
double r113751 = r113749 * r113750;
double r113752 = sin(r113748);
double r113753 = r113752 * r113746;
double r113754 = cos(r113743);
double r113755 = r113753 * r113754;
double r113756 = r113751 - r113755;
double r113757 = atan2(r113747, r113756);
return r113757;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r113758 = lambda1;
double r113759 = sin(r113758);
double r113760 = lambda2;
double r113761 = cos(r113760);
double r113762 = r113759 * r113761;
double r113763 = cos(r113758);
double r113764 = sin(r113760);
double r113765 = r113763 * r113764;
double r113766 = r113762 - r113765;
double r113767 = phi2;
double r113768 = cos(r113767);
double r113769 = r113766 * r113768;
double r113770 = phi1;
double r113771 = cos(r113770);
double r113772 = sin(r113767);
double r113773 = r113771 * r113772;
double r113774 = sin(r113770);
double r113775 = r113774 * r113768;
double r113776 = r113763 * r113761;
double r113777 = r113775 * r113776;
double r113778 = r113759 * r113764;
double r113779 = r113775 * r113778;
double r113780 = exp(r113779);
double r113781 = log(r113780);
double r113782 = r113777 + r113781;
double r113783 = r113773 - r113782;
double r113784 = atan2(r113769, r113783);
return r113784;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.0
rmApplied sin-diff6.7
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
rmApplied add-log-exp0.2
Final simplification0.2
herbie shell --seed 2020020
(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))))))