\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 - \frac{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right) - \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}{\cos \lambda_2 \cdot \cos \lambda_1 - \sin \lambda_1 \cdot \sin \lambda_2}}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r112995 = lambda1;
double r112996 = lambda2;
double r112997 = r112995 - r112996;
double r112998 = sin(r112997);
double r112999 = phi2;
double r113000 = cos(r112999);
double r113001 = r112998 * r113000;
double r113002 = phi1;
double r113003 = cos(r113002);
double r113004 = sin(r112999);
double r113005 = r113003 * r113004;
double r113006 = sin(r113002);
double r113007 = r113006 * r113000;
double r113008 = cos(r112997);
double r113009 = r113007 * r113008;
double r113010 = r113005 - r113009;
double r113011 = atan2(r113001, r113010);
return r113011;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r113012 = lambda1;
double r113013 = sin(r113012);
double r113014 = lambda2;
double r113015 = cos(r113014);
double r113016 = r113013 * r113015;
double r113017 = cos(r113012);
double r113018 = sin(r113014);
double r113019 = r113017 * r113018;
double r113020 = r113016 - r113019;
double r113021 = phi2;
double r113022 = cos(r113021);
double r113023 = r113020 * r113022;
double r113024 = phi1;
double r113025 = cos(r113024);
double r113026 = sin(r113021);
double r113027 = r113025 * r113026;
double r113028 = sin(r113024);
double r113029 = r113028 * r113022;
double r113030 = r113015 * r113017;
double r113031 = r113030 * r113030;
double r113032 = r113013 * r113018;
double r113033 = r113032 * r113032;
double r113034 = r113031 - r113033;
double r113035 = r113029 * r113034;
double r113036 = r113030 - r113032;
double r113037 = r113035 / r113036;
double r113038 = r113027 - r113037;
double r113039 = atan2(r113023, r113038);
return r113039;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 12.6
rmApplied sin-diff6.6
rmApplied cos-diff0.2
Simplified0.2
rmApplied flip-+0.2
Applied associate-*r/0.2
Final simplification0.2
herbie shell --seed 2019325
(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))))))