\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(\left(\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \cos \lambda_1\right) \cdot \cos \lambda_2 + \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(\sqrt[3]{\sin \lambda_1} \cdot \sin \lambda_2\right)\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r96431 = lambda1;
double r96432 = lambda2;
double r96433 = r96431 - r96432;
double r96434 = sin(r96433);
double r96435 = phi2;
double r96436 = cos(r96435);
double r96437 = r96434 * r96436;
double r96438 = phi1;
double r96439 = cos(r96438);
double r96440 = sin(r96435);
double r96441 = r96439 * r96440;
double r96442 = sin(r96438);
double r96443 = r96442 * r96436;
double r96444 = cos(r96433);
double r96445 = r96443 * r96444;
double r96446 = r96441 - r96445;
double r96447 = atan2(r96437, r96446);
return r96447;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r96448 = lambda1;
double r96449 = sin(r96448);
double r96450 = lambda2;
double r96451 = cos(r96450);
double r96452 = r96449 * r96451;
double r96453 = cos(r96448);
double r96454 = sin(r96450);
double r96455 = r96453 * r96454;
double r96456 = r96452 - r96455;
double r96457 = phi2;
double r96458 = cos(r96457);
double r96459 = r96456 * r96458;
double r96460 = phi1;
double r96461 = cos(r96460);
double r96462 = sin(r96457);
double r96463 = r96461 * r96462;
double r96464 = sin(r96460);
double r96465 = r96464 * r96458;
double r96466 = r96465 * r96453;
double r96467 = r96466 * r96451;
double r96468 = cbrt(r96449);
double r96469 = r96468 * r96468;
double r96470 = r96468 * r96454;
double r96471 = r96469 * r96470;
double r96472 = r96465 * r96471;
double r96473 = r96467 + r96472;
double r96474 = r96463 - r96473;
double r96475 = atan2(r96459, r96474);
return r96475;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.2
rmApplied sin-diff6.7
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
rmApplied associate-*r*0.2
rmApplied add-cube-cbrt0.2
Applied associate-*l*0.2
Final simplification0.2
herbie shell --seed 2020042
(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))))))