\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{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left({\left(\cos \lambda_1 \cdot \cos \lambda_2\right)}^{3} - {\left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}^{3}\right)}{\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) + \left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)}}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r110952 = lambda1;
double r110953 = lambda2;
double r110954 = r110952 - r110953;
double r110955 = sin(r110954);
double r110956 = phi2;
double r110957 = cos(r110956);
double r110958 = r110955 * r110957;
double r110959 = phi1;
double r110960 = cos(r110959);
double r110961 = sin(r110956);
double r110962 = r110960 * r110961;
double r110963 = sin(r110959);
double r110964 = r110963 * r110957;
double r110965 = cos(r110954);
double r110966 = r110964 * r110965;
double r110967 = r110962 - r110966;
double r110968 = atan2(r110958, r110967);
return r110968;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r110969 = lambda1;
double r110970 = sin(r110969);
double r110971 = lambda2;
double r110972 = cos(r110971);
double r110973 = r110970 * r110972;
double r110974 = cos(r110969);
double r110975 = -r110971;
double r110976 = sin(r110975);
double r110977 = r110974 * r110976;
double r110978 = r110973 + r110977;
double r110979 = phi2;
double r110980 = cos(r110979);
double r110981 = r110978 * r110980;
double r110982 = phi1;
double r110983 = cos(r110982);
double r110984 = sin(r110979);
double r110985 = r110983 * r110984;
double r110986 = sin(r110982);
double r110987 = r110986 * r110980;
double r110988 = r110974 * r110972;
double r110989 = 3.0;
double r110990 = pow(r110988, r110989);
double r110991 = r110970 * r110976;
double r110992 = pow(r110991, r110989);
double r110993 = r110990 - r110992;
double r110994 = r110987 * r110993;
double r110995 = r110988 * r110988;
double r110996 = r110991 * r110991;
double r110997 = r110988 * r110991;
double r110998 = r110996 + r110997;
double r110999 = r110995 + r110998;
double r111000 = r110994 / r110999;
double r111001 = r110985 - r111000;
double r111002 = atan2(r110981, r111001);
return r111002;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.3
rmApplied sub-neg13.3
Applied sin-sum6.8
Simplified6.8
rmApplied sub-neg6.8
Applied cos-sum0.2
Simplified0.2
rmApplied flip3--0.2
Applied associate-*r/0.2
Final simplification0.2
herbie shell --seed 2020001 +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))))))