\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(\sqrt[3]{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)} \cdot \sqrt[3]{\sin \phi_1 \cdot \cos \phi_2}\right) \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1 + \cos \lambda_2 \cdot \cos \lambda_1\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r4791435 = lambda1;
double r4791436 = lambda2;
double r4791437 = r4791435 - r4791436;
double r4791438 = sin(r4791437);
double r4791439 = phi2;
double r4791440 = cos(r4791439);
double r4791441 = r4791438 * r4791440;
double r4791442 = phi1;
double r4791443 = cos(r4791442);
double r4791444 = sin(r4791439);
double r4791445 = r4791443 * r4791444;
double r4791446 = sin(r4791442);
double r4791447 = r4791446 * r4791440;
double r4791448 = cos(r4791437);
double r4791449 = r4791447 * r4791448;
double r4791450 = r4791445 - r4791449;
double r4791451 = atan2(r4791441, r4791450);
return r4791451;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r4791452 = lambda2;
double r4791453 = cos(r4791452);
double r4791454 = lambda1;
double r4791455 = sin(r4791454);
double r4791456 = r4791453 * r4791455;
double r4791457 = cos(r4791454);
double r4791458 = sin(r4791452);
double r4791459 = r4791457 * r4791458;
double r4791460 = r4791456 - r4791459;
double r4791461 = phi2;
double r4791462 = cos(r4791461);
double r4791463 = r4791460 * r4791462;
double r4791464 = sin(r4791461);
double r4791465 = phi1;
double r4791466 = cos(r4791465);
double r4791467 = r4791464 * r4791466;
double r4791468 = sin(r4791465);
double r4791469 = r4791468 * r4791462;
double r4791470 = r4791469 * r4791469;
double r4791471 = cbrt(r4791470);
double r4791472 = cbrt(r4791469);
double r4791473 = r4791471 * r4791472;
double r4791474 = r4791458 * r4791455;
double r4791475 = r4791453 * r4791457;
double r4791476 = r4791474 + r4791475;
double r4791477 = r4791473 * r4791476;
double r4791478 = r4791467 - r4791477;
double r4791479 = atan2(r4791463, r4791478);
return r4791479;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.6
rmApplied sin-diff7.0
rmApplied cos-diff0.2
rmApplied add-cube-cbrt0.3
rmApplied cbrt-unprod0.3
Final simplification0.3
herbie shell --seed 2019174
(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))))))