\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 - \left(\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \log \left(e^{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)}\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r81008 = lambda1;
double r81009 = lambda2;
double r81010 = r81008 - r81009;
double r81011 = sin(r81010);
double r81012 = phi2;
double r81013 = cos(r81012);
double r81014 = r81011 * r81013;
double r81015 = phi1;
double r81016 = cos(r81015);
double r81017 = sin(r81012);
double r81018 = r81016 * r81017;
double r81019 = sin(r81015);
double r81020 = r81019 * r81013;
double r81021 = cos(r81010);
double r81022 = r81020 * r81021;
double r81023 = r81018 - r81022;
double r81024 = atan2(r81014, r81023);
return r81024;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r81025 = lambda1;
double r81026 = sin(r81025);
double r81027 = lambda2;
double r81028 = cos(r81027);
double r81029 = r81026 * r81028;
double r81030 = cos(r81025);
double r81031 = -r81027;
double r81032 = sin(r81031);
double r81033 = r81030 * r81032;
double r81034 = r81029 + r81033;
double r81035 = phi2;
double r81036 = cos(r81035);
double r81037 = r81034 * r81036;
double r81038 = phi1;
double r81039 = cos(r81038);
double r81040 = sin(r81035);
double r81041 = r81039 * r81040;
double r81042 = sin(r81038);
double r81043 = r81042 * r81036;
double r81044 = r81030 * r81028;
double r81045 = r81043 * r81044;
double r81046 = sin(r81027);
double r81047 = r81026 * r81046;
double r81048 = r81043 * r81047;
double r81049 = exp(r81048);
double r81050 = log(r81049);
double r81051 = r81045 + r81050;
double r81052 = r81041 - r81051;
double r81053 = atan2(r81037, r81052);
return r81053;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 12.9
rmApplied sub-neg12.9
Applied sin-sum6.4
Simplified6.4
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
rmApplied add-log-exp0.2
Final simplification0.2
herbie shell --seed 2019298
(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))))))