\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 \left(-\lambda_2\right)\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \frac{\mathsf{expm1}\left(\mathsf{log1p}\left(\sin \phi_1 \cdot \left(\cos \phi_2 \cdot \left(\mathsf{fma}\left(\cos \lambda_1, \cos \lambda_2, \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)\right)\right)\right)}{\cos \lambda_1 \cdot \cos \lambda_2 + \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)}}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r115923 = lambda1;
double r115924 = lambda2;
double r115925 = r115923 - r115924;
double r115926 = sin(r115925);
double r115927 = phi2;
double r115928 = cos(r115927);
double r115929 = r115926 * r115928;
double r115930 = phi1;
double r115931 = cos(r115930);
double r115932 = sin(r115927);
double r115933 = r115931 * r115932;
double r115934 = sin(r115930);
double r115935 = r115934 * r115928;
double r115936 = cos(r115925);
double r115937 = r115935 * r115936;
double r115938 = r115933 - r115937;
double r115939 = atan2(r115929, r115938);
return r115939;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r115940 = lambda1;
double r115941 = sin(r115940);
double r115942 = lambda2;
double r115943 = cos(r115942);
double r115944 = r115941 * r115943;
double r115945 = cos(r115940);
double r115946 = -r115942;
double r115947 = sin(r115946);
double r115948 = r115945 * r115947;
double r115949 = r115944 + r115948;
double r115950 = phi2;
double r115951 = cos(r115950);
double r115952 = r115949 * r115951;
double r115953 = phi1;
double r115954 = cos(r115953);
double r115955 = sin(r115950);
double r115956 = r115954 * r115955;
double r115957 = sin(r115953);
double r115958 = r115941 * r115947;
double r115959 = fma(r115945, r115943, r115958);
double r115960 = r115945 * r115943;
double r115961 = r115960 - r115958;
double r115962 = r115959 * r115961;
double r115963 = r115951 * r115962;
double r115964 = r115957 * r115963;
double r115965 = log1p(r115964);
double r115966 = expm1(r115965);
double r115967 = r115960 + r115958;
double r115968 = r115966 / r115967;
double r115969 = r115956 - r115968;
double r115970 = atan2(r115952, r115969);
return r115970;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 13.2
rmApplied sub-neg13.2
Applied sin-sum6.5
Simplified6.5
rmApplied sub-neg6.5
Applied cos-sum0.2
Simplified0.2
rmApplied flip--0.2
Applied associate-*r/0.2
Simplified0.2
rmApplied expm1-log1p-u0.2
Final simplification0.2
herbie shell --seed 2020039 +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))))))