\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(\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \lambda_1\right) \cdot \cos \lambda_2 + \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\left(\sqrt[3]{\sin \lambda_1} \cdot \sqrt[3]{\sin \lambda_1}\right) \cdot \left(\sqrt[3]{\sin \lambda_1} \cdot \sin \lambda_2\right)\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r95921 = lambda1;
double r95922 = lambda2;
double r95923 = r95921 - r95922;
double r95924 = sin(r95923);
double r95925 = phi2;
double r95926 = cos(r95925);
double r95927 = r95924 * r95926;
double r95928 = phi1;
double r95929 = cos(r95928);
double r95930 = sin(r95925);
double r95931 = r95929 * r95930;
double r95932 = sin(r95928);
double r95933 = r95932 * r95926;
double r95934 = cos(r95923);
double r95935 = r95933 * r95934;
double r95936 = r95931 - r95935;
double r95937 = atan2(r95927, r95936);
return r95937;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r95938 = lambda1;
double r95939 = sin(r95938);
double r95940 = lambda2;
double r95941 = cos(r95940);
double r95942 = r95939 * r95941;
double r95943 = cos(r95938);
double r95944 = sin(r95940);
double r95945 = r95943 * r95944;
double r95946 = r95942 - r95945;
double r95947 = phi2;
double r95948 = cos(r95947);
double r95949 = r95946 * r95948;
double r95950 = phi1;
double r95951 = cos(r95950);
double r95952 = sin(r95947);
double r95953 = r95951 * r95952;
double r95954 = sin(r95950);
double r95955 = r95954 * r95948;
double r95956 = r95955 * r95943;
double r95957 = r95956 * r95941;
double r95958 = cbrt(r95939);
double r95959 = r95958 * r95958;
double r95960 = r95958 * r95944;
double r95961 = r95959 * r95960;
double r95962 = r95955 * r95961;
double r95963 = r95957 + r95962;
double r95964 = r95953 - r95963;
double r95965 = atan2(r95949, r95964);
return r95965;
}



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 associate-*r*0.2
rmApplied add-cube-cbrt0.2
Applied associate-*l*0.2
Final simplification0.2
herbie shell --seed 2020042
(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))))))