\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 - \frac{\cos \phi_2 \cdot \left(\left(\cos \lambda_2 \cdot \cos \lambda_1 - \sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \left(\sin \phi_1 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right)\right)\right)}{\cos \lambda_2 \cdot \cos \lambda_1 - \sin \lambda_2 \cdot \sin \lambda_1}}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r4450640 = lambda1;
double r4450641 = lambda2;
double r4450642 = r4450640 - r4450641;
double r4450643 = sin(r4450642);
double r4450644 = phi2;
double r4450645 = cos(r4450644);
double r4450646 = r4450643 * r4450645;
double r4450647 = phi1;
double r4450648 = cos(r4450647);
double r4450649 = sin(r4450644);
double r4450650 = r4450648 * r4450649;
double r4450651 = sin(r4450647);
double r4450652 = r4450651 * r4450645;
double r4450653 = cos(r4450642);
double r4450654 = r4450652 * r4450653;
double r4450655 = r4450650 - r4450654;
double r4450656 = atan2(r4450646, r4450655);
return r4450656;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r4450657 = lambda2;
double r4450658 = cos(r4450657);
double r4450659 = lambda1;
double r4450660 = sin(r4450659);
double r4450661 = r4450658 * r4450660;
double r4450662 = cos(r4450659);
double r4450663 = sin(r4450657);
double r4450664 = r4450662 * r4450663;
double r4450665 = r4450661 - r4450664;
double r4450666 = phi2;
double r4450667 = cos(r4450666);
double r4450668 = r4450665 * r4450667;
double r4450669 = sin(r4450666);
double r4450670 = phi1;
double r4450671 = cos(r4450670);
double r4450672 = r4450669 * r4450671;
double r4450673 = r4450658 * r4450662;
double r4450674 = r4450663 * r4450660;
double r4450675 = r4450673 - r4450674;
double r4450676 = sin(r4450670);
double r4450677 = fma(r4450663, r4450660, r4450673);
double r4450678 = r4450676 * r4450677;
double r4450679 = r4450675 * r4450678;
double r4450680 = r4450667 * r4450679;
double r4450681 = r4450680 / r4450675;
double r4450682 = r4450672 - r4450681;
double r4450683 = atan2(r4450668, r4450682);
return r4450683;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 13.6
rmApplied sin-diff7.0
rmApplied cos-diff0.2
rmApplied flip-+0.2
Applied associate-*r/0.2
Taylor expanded around inf 0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019174 +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))))))