\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(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 - \log \left(e^{\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)}\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r91211 = lambda1;
double r91212 = lambda2;
double r91213 = r91211 - r91212;
double r91214 = sin(r91213);
double r91215 = phi2;
double r91216 = cos(r91215);
double r91217 = r91214 * r91216;
double r91218 = phi1;
double r91219 = cos(r91218);
double r91220 = sin(r91215);
double r91221 = r91219 * r91220;
double r91222 = sin(r91218);
double r91223 = r91222 * r91216;
double r91224 = cos(r91213);
double r91225 = r91223 * r91224;
double r91226 = r91221 - r91225;
double r91227 = atan2(r91217, r91226);
return r91227;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r91228 = lambda1;
double r91229 = sin(r91228);
double r91230 = lambda2;
double r91231 = cos(r91230);
double r91232 = r91229 * r91231;
double r91233 = cos(r91228);
double r91234 = sin(r91230);
double r91235 = r91233 * r91234;
double r91236 = r91232 - r91235;
double r91237 = phi2;
double r91238 = cos(r91237);
double r91239 = r91236 * r91238;
double r91240 = phi1;
double r91241 = cos(r91240);
double r91242 = sin(r91237);
double r91243 = r91241 * r91242;
double r91244 = sin(r91240);
double r91245 = r91244 * r91238;
double r91246 = r91233 * r91231;
double r91247 = -r91230;
double r91248 = sin(r91247);
double r91249 = r91229 * r91248;
double r91250 = exp(r91249);
double r91251 = log(r91250);
double r91252 = r91246 - r91251;
double r91253 = r91245 * r91252;
double r91254 = r91243 - r91253;
double r91255 = atan2(r91239, r91254);
return r91255;
}



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 sub-neg6.6
Applied cos-sum0.2
Simplified0.2
rmApplied add-log-exp0.2
Final simplification0.2
herbie shell --seed 2019325 +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))))))