\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{\mathsf{log1p}\left(\mathsf{expm1}\left(\left(\sin \lambda_1 \cdot \cos \lambda_2 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2\right)\right)}{\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 r78557 = lambda1;
double r78558 = lambda2;
double r78559 = r78557 - r78558;
double r78560 = sin(r78559);
double r78561 = phi2;
double r78562 = cos(r78561);
double r78563 = r78560 * r78562;
double r78564 = phi1;
double r78565 = cos(r78564);
double r78566 = sin(r78561);
double r78567 = r78565 * r78566;
double r78568 = sin(r78564);
double r78569 = r78568 * r78562;
double r78570 = cos(r78559);
double r78571 = r78569 * r78570;
double r78572 = r78567 - r78571;
double r78573 = atan2(r78563, r78572);
return r78573;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r78574 = lambda1;
double r78575 = sin(r78574);
double r78576 = lambda2;
double r78577 = cos(r78576);
double r78578 = r78575 * r78577;
double r78579 = cos(r78574);
double r78580 = sin(r78576);
double r78581 = r78579 * r78580;
double r78582 = r78578 - r78581;
double r78583 = phi2;
double r78584 = cos(r78583);
double r78585 = r78582 * r78584;
double r78586 = expm1(r78585);
double r78587 = log1p(r78586);
double r78588 = phi1;
double r78589 = cos(r78588);
double r78590 = sin(r78583);
double r78591 = r78589 * r78590;
double r78592 = sin(r78588);
double r78593 = r78592 * r78584;
double r78594 = r78579 * r78577;
double r78595 = r78593 * r78594;
double r78596 = r78575 * r78580;
double r78597 = r78596 * r78593;
double r78598 = r78595 + r78597;
double r78599 = r78591 - r78598;
double r78600 = atan2(r78587, r78599);
return r78600;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.0
rmApplied sin-diff6.4
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
Simplified0.2
rmApplied log1p-expm1-u0.2
Final simplification0.2
herbie shell --seed 2019195 +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))))))