\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{\mathsf{log1p}\left(\mathsf{expm1}\left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_1, \cos \lambda_2, \sin \left(-\lambda_2\right) \cdot \cos \lambda_1\right)\right)\right)}{\cos \phi_1 \cdot \sin \phi_2 - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1 - \left(\left(\sqrt[3]{\sin \left(-\lambda_2\right)} \cdot \sqrt[3]{\sin \left(-\lambda_2\right)}\right) \cdot \sin \lambda_1\right) \cdot \sqrt[3]{\sin \left(-\lambda_2\right)}\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r129564 = lambda1;
double r129565 = lambda2;
double r129566 = r129564 - r129565;
double r129567 = sin(r129566);
double r129568 = phi2;
double r129569 = cos(r129568);
double r129570 = r129567 * r129569;
double r129571 = phi1;
double r129572 = cos(r129571);
double r129573 = sin(r129568);
double r129574 = r129572 * r129573;
double r129575 = sin(r129571);
double r129576 = r129575 * r129569;
double r129577 = cos(r129566);
double r129578 = r129576 * r129577;
double r129579 = r129574 - r129578;
double r129580 = atan2(r129570, r129579);
return r129580;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r129581 = phi2;
double r129582 = cos(r129581);
double r129583 = lambda1;
double r129584 = sin(r129583);
double r129585 = lambda2;
double r129586 = cos(r129585);
double r129587 = -r129585;
double r129588 = sin(r129587);
double r129589 = cos(r129583);
double r129590 = r129588 * r129589;
double r129591 = fma(r129584, r129586, r129590);
double r129592 = r129582 * r129591;
double r129593 = expm1(r129592);
double r129594 = log1p(r129593);
double r129595 = phi1;
double r129596 = cos(r129595);
double r129597 = sin(r129581);
double r129598 = r129596 * r129597;
double r129599 = sin(r129595);
double r129600 = r129599 * r129582;
double r129601 = r129586 * r129589;
double r129602 = cbrt(r129588);
double r129603 = r129602 * r129602;
double r129604 = r129603 * r129584;
double r129605 = r129604 * r129602;
double r129606 = r129601 - r129605;
double r129607 = r129600 * r129606;
double r129608 = r129598 - r129607;
double r129609 = atan2(r129594, r129608);
return r129609;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 13.5
rmApplied sub-neg13.5
Applied sin-sum6.8
Simplified6.8
rmApplied sub-neg6.8
Applied cos-sum0.2
Simplified0.2
rmApplied log1p-expm1-u0.2
Simplified0.2
rmApplied add-cube-cbrt0.2
Applied associate-*r*0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019235 +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))))))