\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(\sqrt[3]{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)} \cdot \sqrt[3]{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)}\right) \cdot \mathsf{log1p}\left(\mathsf{expm1}\left(\sqrt[3]{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)}\right)\right) + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r87969 = lambda1;
double r87970 = lambda2;
double r87971 = r87969 - r87970;
double r87972 = sin(r87971);
double r87973 = phi2;
double r87974 = cos(r87973);
double r87975 = r87972 * r87974;
double r87976 = phi1;
double r87977 = cos(r87976);
double r87978 = sin(r87973);
double r87979 = r87977 * r87978;
double r87980 = sin(r87976);
double r87981 = r87980 * r87974;
double r87982 = cos(r87971);
double r87983 = r87981 * r87982;
double r87984 = r87979 - r87983;
double r87985 = atan2(r87975, r87984);
return r87985;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r87986 = lambda1;
double r87987 = sin(r87986);
double r87988 = lambda2;
double r87989 = cos(r87988);
double r87990 = r87987 * r87989;
double r87991 = cos(r87986);
double r87992 = sin(r87988);
double r87993 = r87991 * r87992;
double r87994 = r87990 - r87993;
double r87995 = phi2;
double r87996 = cos(r87995);
double r87997 = r87994 * r87996;
double r87998 = phi1;
double r87999 = cos(r87998);
double r88000 = sin(r87995);
double r88001 = r87999 * r88000;
double r88002 = sin(r87998);
double r88003 = r88002 * r87996;
double r88004 = r87991 * r87989;
double r88005 = r88003 * r88004;
double r88006 = cbrt(r88005);
double r88007 = r88006 * r88006;
double r88008 = expm1(r88006);
double r88009 = log1p(r88008);
double r88010 = r88007 * r88009;
double r88011 = r87987 * r87992;
double r88012 = r88011 * r88003;
double r88013 = r88010 + r88012;
double r88014 = r88001 - r88013;
double r88015 = atan2(r87997, r88014);
return r88015;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.0
rmApplied sin-diff6.6
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
Simplified0.2
rmApplied add-cube-cbrt0.3
rmApplied log1p-expm1-u0.3
Final simplification0.3
herbie shell --seed 2019303 +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))))))