\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(\cos \lambda_2 \cdot \sin \lambda_1 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{\sin \phi_2 \cdot \cos \phi_1 - \left(\left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right) + \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\left(\sqrt[3]{\sin \lambda_1} \cdot \sqrt[3]{\sin \lambda_1}\right) \cdot \left(\sin \lambda_2 \cdot \sqrt[3]{\sin \lambda_1}\right)\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r5376693 = lambda1;
double r5376694 = lambda2;
double r5376695 = r5376693 - r5376694;
double r5376696 = sin(r5376695);
double r5376697 = phi2;
double r5376698 = cos(r5376697);
double r5376699 = r5376696 * r5376698;
double r5376700 = phi1;
double r5376701 = cos(r5376700);
double r5376702 = sin(r5376697);
double r5376703 = r5376701 * r5376702;
double r5376704 = sin(r5376700);
double r5376705 = r5376704 * r5376698;
double r5376706 = cos(r5376695);
double r5376707 = r5376705 * r5376706;
double r5376708 = r5376703 - r5376707;
double r5376709 = atan2(r5376699, r5376708);
return r5376709;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r5376710 = lambda2;
double r5376711 = cos(r5376710);
double r5376712 = lambda1;
double r5376713 = sin(r5376712);
double r5376714 = r5376711 * r5376713;
double r5376715 = cos(r5376712);
double r5376716 = sin(r5376710);
double r5376717 = r5376715 * r5376716;
double r5376718 = r5376714 - r5376717;
double r5376719 = phi2;
double r5376720 = cos(r5376719);
double r5376721 = r5376718 * r5376720;
double r5376722 = sin(r5376719);
double r5376723 = phi1;
double r5376724 = cos(r5376723);
double r5376725 = r5376722 * r5376724;
double r5376726 = r5376711 * r5376715;
double r5376727 = sin(r5376723);
double r5376728 = r5376727 * r5376720;
double r5376729 = r5376726 * r5376728;
double r5376730 = cbrt(r5376713);
double r5376731 = r5376730 * r5376730;
double r5376732 = r5376716 * r5376730;
double r5376733 = r5376731 * r5376732;
double r5376734 = r5376728 * r5376733;
double r5376735 = r5376729 + r5376734;
double r5376736 = r5376725 - r5376735;
double r5376737 = atan2(r5376721, r5376736);
return r5376737;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.1
rmApplied sin-diff6.7
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
rmApplied add-cube-cbrt0.2
Applied associate-*l*0.2
Final simplification0.2
herbie shell --seed 2019168 +o rules:numerics
(FPCore (lambda1 lambda2 phi1 phi2)
:name "Bearing on a great circle"
(atan2 (* (sin (- lambda1 lambda2)) (cos phi2)) (- (* (cos phi1) (sin phi2)) (* (* (sin phi1) (cos phi2)) (cos (- lambda1 lambda2))))))