\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 \left(-\lambda_2\right)\right) \cdot \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 r160566 = lambda1;
double r160567 = lambda2;
double r160568 = r160566 - r160567;
double r160569 = sin(r160568);
double r160570 = phi2;
double r160571 = cos(r160570);
double r160572 = r160569 * r160571;
double r160573 = phi1;
double r160574 = cos(r160573);
double r160575 = sin(r160570);
double r160576 = r160574 * r160575;
double r160577 = sin(r160573);
double r160578 = r160577 * r160571;
double r160579 = cos(r160568);
double r160580 = r160578 * r160579;
double r160581 = r160576 - r160580;
double r160582 = atan2(r160572, r160581);
return r160582;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r160583 = lambda1;
double r160584 = sin(r160583);
double r160585 = lambda2;
double r160586 = cos(r160585);
double r160587 = r160584 * r160586;
double r160588 = cos(r160583);
double r160589 = -r160585;
double r160590 = sin(r160589);
double r160591 = r160588 * r160590;
double r160592 = r160587 + r160591;
double r160593 = phi2;
double r160594 = cos(r160593);
double r160595 = r160592 * r160594;
double r160596 = phi1;
double r160597 = cos(r160596);
double r160598 = sin(r160593);
double r160599 = r160597 * r160598;
double r160600 = sin(r160596);
double r160601 = r160600 * r160594;
double r160602 = r160588 * r160586;
double r160603 = r160584 * r160590;
double r160604 = r160602 - r160603;
double r160605 = r160601 * r160604;
double r160606 = r160599 - r160605;
double r160607 = atan2(r160595, r160606);
return r160607;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.3
rmApplied sub-neg13.3
Applied sin-sum6.8
Simplified6.8
rmApplied sub-neg6.8
Applied cos-sum0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2020001
(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))))))