\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(\log \left(\sqrt{e^{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)}}\right) + \log \left(\sqrt{e^{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)}}\right)\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r128553 = lambda1;
double r128554 = lambda2;
double r128555 = r128553 - r128554;
double r128556 = sin(r128555);
double r128557 = phi2;
double r128558 = cos(r128557);
double r128559 = r128556 * r128558;
double r128560 = phi1;
double r128561 = cos(r128560);
double r128562 = sin(r128557);
double r128563 = r128561 * r128562;
double r128564 = sin(r128560);
double r128565 = r128564 * r128558;
double r128566 = cos(r128555);
double r128567 = r128565 * r128566;
double r128568 = r128563 - r128567;
double r128569 = atan2(r128559, r128568);
return r128569;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r128570 = lambda1;
double r128571 = sin(r128570);
double r128572 = lambda2;
double r128573 = cos(r128572);
double r128574 = r128571 * r128573;
double r128575 = cos(r128570);
double r128576 = sin(r128572);
double r128577 = r128575 * r128576;
double r128578 = r128574 - r128577;
double r128579 = phi2;
double r128580 = cos(r128579);
double r128581 = r128578 * r128580;
double r128582 = phi1;
double r128583 = cos(r128582);
double r128584 = sin(r128579);
double r128585 = r128583 * r128584;
double r128586 = sin(r128582);
double r128587 = r128586 * r128580;
double r128588 = r128575 * r128573;
double r128589 = r128587 * r128588;
double r128590 = r128571 * r128576;
double r128591 = r128587 * r128590;
double r128592 = exp(r128591);
double r128593 = sqrt(r128592);
double r128594 = log(r128593);
double r128595 = r128594 + r128594;
double r128596 = r128589 + r128595;
double r128597 = r128585 - r128596;
double r128598 = atan2(r128581, r128597);
return r128598;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.0
rmApplied sin-diff6.6
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
rmApplied add-log-exp0.2
rmApplied add-sqr-sqrt0.2
Applied log-prod0.2
Final simplification0.2
herbie shell --seed 2019356
(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))))))