\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(\cos \lambda_2 \cdot \sin \lambda_1 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{\sin \phi_2 \cdot \cos \phi_1 - \left(\left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right) + \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\left(\sqrt[3]{\sin \lambda_1} \cdot \sqrt[3]{\sin \lambda_1}\right) \cdot \left(\sin \lambda_2 \cdot \sqrt[3]{\sin \lambda_1}\right)\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r4968240 = lambda1;
double r4968241 = lambda2;
double r4968242 = r4968240 - r4968241;
double r4968243 = sin(r4968242);
double r4968244 = phi2;
double r4968245 = cos(r4968244);
double r4968246 = r4968243 * r4968245;
double r4968247 = phi1;
double r4968248 = cos(r4968247);
double r4968249 = sin(r4968244);
double r4968250 = r4968248 * r4968249;
double r4968251 = sin(r4968247);
double r4968252 = r4968251 * r4968245;
double r4968253 = cos(r4968242);
double r4968254 = r4968252 * r4968253;
double r4968255 = r4968250 - r4968254;
double r4968256 = atan2(r4968246, r4968255);
return r4968256;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r4968257 = lambda2;
double r4968258 = cos(r4968257);
double r4968259 = lambda1;
double r4968260 = sin(r4968259);
double r4968261 = r4968258 * r4968260;
double r4968262 = cos(r4968259);
double r4968263 = sin(r4968257);
double r4968264 = r4968262 * r4968263;
double r4968265 = r4968261 - r4968264;
double r4968266 = phi2;
double r4968267 = cos(r4968266);
double r4968268 = r4968265 * r4968267;
double r4968269 = sin(r4968266);
double r4968270 = phi1;
double r4968271 = cos(r4968270);
double r4968272 = r4968269 * r4968271;
double r4968273 = r4968258 * r4968262;
double r4968274 = sin(r4968270);
double r4968275 = r4968274 * r4968267;
double r4968276 = r4968273 * r4968275;
double r4968277 = cbrt(r4968260);
double r4968278 = r4968277 * r4968277;
double r4968279 = r4968263 * r4968277;
double r4968280 = r4968278 * r4968279;
double r4968281 = r4968275 * r4968280;
double r4968282 = r4968276 + r4968281;
double r4968283 = r4968272 - r4968282;
double r4968284 = atan2(r4968268, r4968283);
return r4968284;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.1
rmApplied sin-diff6.7
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
rmApplied add-cube-cbrt0.2
Applied associate-*l*0.2
Final simplification0.2
herbie shell --seed 2019168 +o rules:numerics
(FPCore (lambda1 lambda2 phi1 phi2)
:name "Bearing on a great circle"
(atan2 (* (sin (- lambda1 lambda2)) (cos phi2)) (- (* (cos phi1) (sin phi2)) (* (* (sin phi1) (cos phi2)) (cos (- lambda1 lambda2))))))