\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(\sqrt[3]{\sin \lambda_2 \cdot \sin \lambda_1} \cdot \left(\sqrt[3]{\sin \lambda_2 \cdot \sin \lambda_1} \cdot \sqrt[3]{\sin \lambda_2 \cdot \sin \lambda_1}\right)\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r4803339 = lambda1;
double r4803340 = lambda2;
double r4803341 = r4803339 - r4803340;
double r4803342 = sin(r4803341);
double r4803343 = phi2;
double r4803344 = cos(r4803343);
double r4803345 = r4803342 * r4803344;
double r4803346 = phi1;
double r4803347 = cos(r4803346);
double r4803348 = sin(r4803343);
double r4803349 = r4803347 * r4803348;
double r4803350 = sin(r4803346);
double r4803351 = r4803350 * r4803344;
double r4803352 = cos(r4803341);
double r4803353 = r4803351 * r4803352;
double r4803354 = r4803349 - r4803353;
double r4803355 = atan2(r4803345, r4803354);
return r4803355;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r4803356 = lambda2;
double r4803357 = cos(r4803356);
double r4803358 = lambda1;
double r4803359 = sin(r4803358);
double r4803360 = r4803357 * r4803359;
double r4803361 = cos(r4803358);
double r4803362 = sin(r4803356);
double r4803363 = r4803361 * r4803362;
double r4803364 = r4803360 - r4803363;
double r4803365 = phi2;
double r4803366 = cos(r4803365);
double r4803367 = r4803364 * r4803366;
double r4803368 = sin(r4803365);
double r4803369 = phi1;
double r4803370 = cos(r4803369);
double r4803371 = r4803368 * r4803370;
double r4803372 = r4803357 * r4803361;
double r4803373 = sin(r4803369);
double r4803374 = r4803373 * r4803366;
double r4803375 = r4803372 * r4803374;
double r4803376 = r4803362 * r4803359;
double r4803377 = cbrt(r4803376);
double r4803378 = r4803377 * r4803377;
double r4803379 = r4803377 * r4803378;
double r4803380 = r4803374 * r4803379;
double r4803381 = r4803375 + r4803380;
double r4803382 = r4803371 - r4803381;
double r4803383 = atan2(r4803367, r4803382);
return r4803383;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.3
rmApplied sin-diff6.8
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
rmApplied add-cube-cbrt0.2
Final simplification0.2
herbie shell --seed 2019163 +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))))))