\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 r95946 = lambda1;
double r95947 = lambda2;
double r95948 = r95946 - r95947;
double r95949 = sin(r95948);
double r95950 = phi2;
double r95951 = cos(r95950);
double r95952 = r95949 * r95951;
double r95953 = phi1;
double r95954 = cos(r95953);
double r95955 = sin(r95950);
double r95956 = r95954 * r95955;
double r95957 = sin(r95953);
double r95958 = r95957 * r95951;
double r95959 = cos(r95948);
double r95960 = r95958 * r95959;
double r95961 = r95956 - r95960;
double r95962 = atan2(r95952, r95961);
return r95962;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r95963 = lambda1;
double r95964 = sin(r95963);
double r95965 = lambda2;
double r95966 = cos(r95965);
double r95967 = r95964 * r95966;
double r95968 = cos(r95963);
double r95969 = -r95965;
double r95970 = sin(r95969);
double r95971 = r95968 * r95970;
double r95972 = log1p(r95971);
double r95973 = expm1(r95972);
double r95974 = r95967 + r95973;
double r95975 = phi2;
double r95976 = cos(r95975);
double r95977 = r95974 * r95976;
double r95978 = phi1;
double r95979 = cos(r95978);
double r95980 = sin(r95975);
double r95981 = r95979 * r95980;
double r95982 = sin(r95978);
double r95983 = r95982 * r95976;
double r95984 = r95968 * r95966;
double r95985 = r95983 * r95984;
double r95986 = sin(r95965);
double r95987 = r95964 * r95986;
double r95988 = r95983 * r95987;
double r95989 = r95985 + r95988;
double r95990 = r95981 - r95989;
double r95991 = atan2(r95977, r95990);
return r95991;
}



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))))))