\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(\left(\sin \lambda_1 \cdot \left(\sqrt[3]{\cos \lambda_2} \cdot \sqrt[3]{\cos \lambda_2}\right)\right) \cdot \sqrt[3]{\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(\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r92637 = lambda1;
double r92638 = lambda2;
double r92639 = r92637 - r92638;
double r92640 = sin(r92639);
double r92641 = phi2;
double r92642 = cos(r92641);
double r92643 = r92640 * r92642;
double r92644 = phi1;
double r92645 = cos(r92644);
double r92646 = sin(r92641);
double r92647 = r92645 * r92646;
double r92648 = sin(r92644);
double r92649 = r92648 * r92642;
double r92650 = cos(r92639);
double r92651 = r92649 * r92650;
double r92652 = r92647 - r92651;
double r92653 = atan2(r92643, r92652);
return r92653;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r92654 = lambda1;
double r92655 = sin(r92654);
double r92656 = lambda2;
double r92657 = cos(r92656);
double r92658 = cbrt(r92657);
double r92659 = r92658 * r92658;
double r92660 = r92655 * r92659;
double r92661 = r92660 * r92658;
double r92662 = cos(r92654);
double r92663 = -r92656;
double r92664 = sin(r92663);
double r92665 = r92662 * r92664;
double r92666 = r92661 + r92665;
double r92667 = phi2;
double r92668 = cos(r92667);
double r92669 = r92666 * r92668;
double r92670 = phi1;
double r92671 = cos(r92670);
double r92672 = sin(r92667);
double r92673 = r92671 * r92672;
double r92674 = sin(r92670);
double r92675 = r92674 * r92668;
double r92676 = r92662 * r92657;
double r92677 = r92675 * r92676;
double r92678 = sin(r92656);
double r92679 = r92655 * r92678;
double r92680 = r92679 * r92675;
double r92681 = r92677 + r92680;
double r92682 = r92673 - r92681;
double r92683 = atan2(r92669, r92682);
return r92683;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.1
rmApplied sub-neg13.1
Applied sin-sum6.9
Simplified6.9
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
Simplified0.2
rmApplied add-cube-cbrt0.2
Applied associate-*r*0.2
Final simplification0.2
herbie shell --seed 2019350 +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))))))