\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(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\sqrt[3]{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)} \cdot \sqrt[3]{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)}\right) \cdot \sqrt[3]{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)}\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r144649 = lambda1;
double r144650 = lambda2;
double r144651 = r144649 - r144650;
double r144652 = sin(r144651);
double r144653 = phi2;
double r144654 = cos(r144653);
double r144655 = r144652 * r144654;
double r144656 = phi1;
double r144657 = cos(r144656);
double r144658 = sin(r144653);
double r144659 = r144657 * r144658;
double r144660 = sin(r144656);
double r144661 = r144660 * r144654;
double r144662 = cos(r144651);
double r144663 = r144661 * r144662;
double r144664 = r144659 - r144663;
double r144665 = atan2(r144655, r144664);
return r144665;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r144666 = lambda1;
double r144667 = sin(r144666);
double r144668 = lambda2;
double r144669 = cos(r144668);
double r144670 = r144667 * r144669;
double r144671 = cos(r144666);
double r144672 = sin(r144668);
double r144673 = r144671 * r144672;
double r144674 = r144670 - r144673;
double r144675 = phi2;
double r144676 = cos(r144675);
double r144677 = r144674 * r144676;
double r144678 = phi1;
double r144679 = cos(r144678);
double r144680 = sin(r144675);
double r144681 = r144679 * r144680;
double r144682 = sin(r144678);
double r144683 = r144682 * r144676;
double r144684 = r144671 * r144669;
double r144685 = r144683 * r144684;
double r144686 = r144667 * r144672;
double r144687 = r144683 * r144686;
double r144688 = cbrt(r144687);
double r144689 = r144688 * r144688;
double r144690 = r144689 * r144688;
double r144691 = r144685 + r144690;
double r144692 = r144681 - r144691;
double r144693 = atan2(r144677, r144692);
return r144693;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.1
rmApplied sin-diff6.9
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
rmApplied add-cube-cbrt0.2
Final simplification0.2
herbie shell --seed 2019353
(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))))))