\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(\mathsf{fma}\left(\sin \lambda_1, \cos \lambda_2, \sin \left(-\lambda_2\right) \cdot \cos \lambda_1\right) \cdot \left(\sqrt[3]{\cos \phi_2} \cdot \sqrt[3]{\cos \phi_2}\right)\right) \cdot \sqrt[3]{\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 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r113475 = lambda1;
double r113476 = lambda2;
double r113477 = r113475 - r113476;
double r113478 = sin(r113477);
double r113479 = phi2;
double r113480 = cos(r113479);
double r113481 = r113478 * r113480;
double r113482 = phi1;
double r113483 = cos(r113482);
double r113484 = sin(r113479);
double r113485 = r113483 * r113484;
double r113486 = sin(r113482);
double r113487 = r113486 * r113480;
double r113488 = cos(r113477);
double r113489 = r113487 * r113488;
double r113490 = r113485 - r113489;
double r113491 = atan2(r113481, r113490);
return r113491;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r113492 = lambda1;
double r113493 = sin(r113492);
double r113494 = lambda2;
double r113495 = cos(r113494);
double r113496 = -r113494;
double r113497 = sin(r113496);
double r113498 = cos(r113492);
double r113499 = r113497 * r113498;
double r113500 = fma(r113493, r113495, r113499);
double r113501 = phi2;
double r113502 = cos(r113501);
double r113503 = cbrt(r113502);
double r113504 = r113503 * r113503;
double r113505 = r113500 * r113504;
double r113506 = r113505 * r113503;
double r113507 = phi1;
double r113508 = cos(r113507);
double r113509 = sin(r113501);
double r113510 = r113508 * r113509;
double r113511 = sin(r113507);
double r113512 = r113511 * r113502;
double r113513 = r113498 * r113495;
double r113514 = r113493 * r113497;
double r113515 = r113513 - r113514;
double r113516 = r113512 * r113515;
double r113517 = r113510 - r113516;
double r113518 = atan2(r113506, r113517);
return r113518;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 12.6
rmApplied sub-neg12.6
Applied sin-sum6.6
Simplified6.6
rmApplied sub-neg6.6
Applied cos-sum0.2
Simplified0.2
rmApplied add-cube-cbrt0.4
Applied associate-*r*0.4
Simplified0.4
Final simplification0.4
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))))))