\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_2 \cdot \cos \lambda_1 + \left(2 \cdot \log \left(\sqrt[3]{e^{\sin \lambda_2 \cdot \sin \lambda_1}}\right) + \log \left(\sqrt[3]{e^{\sin \lambda_2 \cdot \sin \lambda_1}}\right)\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r76662 = lambda1;
double r76663 = lambda2;
double r76664 = r76662 - r76663;
double r76665 = sin(r76664);
double r76666 = phi2;
double r76667 = cos(r76666);
double r76668 = r76665 * r76667;
double r76669 = phi1;
double r76670 = cos(r76669);
double r76671 = sin(r76666);
double r76672 = r76670 * r76671;
double r76673 = sin(r76669);
double r76674 = r76673 * r76667;
double r76675 = cos(r76664);
double r76676 = r76674 * r76675;
double r76677 = r76672 - r76676;
double r76678 = atan2(r76668, r76677);
return r76678;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r76679 = lambda1;
double r76680 = sin(r76679);
double r76681 = lambda2;
double r76682 = cos(r76681);
double r76683 = r76680 * r76682;
double r76684 = cos(r76679);
double r76685 = -r76681;
double r76686 = sin(r76685);
double r76687 = r76684 * r76686;
double r76688 = r76683 + r76687;
double r76689 = phi2;
double r76690 = cos(r76689);
double r76691 = r76688 * r76690;
double r76692 = phi1;
double r76693 = cos(r76692);
double r76694 = sin(r76689);
double r76695 = r76693 * r76694;
double r76696 = sin(r76692);
double r76697 = r76696 * r76690;
double r76698 = r76682 * r76684;
double r76699 = 2.0;
double r76700 = sin(r76681);
double r76701 = r76700 * r76680;
double r76702 = exp(r76701);
double r76703 = cbrt(r76702);
double r76704 = log(r76703);
double r76705 = r76699 * r76704;
double r76706 = r76705 + r76704;
double r76707 = r76698 + r76706;
double r76708 = r76697 * r76707;
double r76709 = r76695 - r76708;
double r76710 = atan2(r76691, r76709);
return r76710;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.5
rmApplied sub-neg13.5
Applied sin-sum6.8
Simplified6.8
rmApplied cos-diff0.2
Simplified0.2
Simplified0.2
rmApplied add-log-exp0.2
rmApplied add-cube-cbrt0.2
Applied log-prod0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019235
(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))))))