\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 \left(-\lambda_2\right)\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 + \left(\sqrt[3]{\sin \lambda_1 \cdot \sin \lambda_2} \cdot \sqrt[3]{\sin \lambda_1 \cdot \sin \lambda_2}\right) \cdot \sqrt[3]{\sin \lambda_1 \cdot \sin \lambda_2}\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r108548 = lambda1;
double r108549 = lambda2;
double r108550 = r108548 - r108549;
double r108551 = sin(r108550);
double r108552 = phi2;
double r108553 = cos(r108552);
double r108554 = r108551 * r108553;
double r108555 = phi1;
double r108556 = cos(r108555);
double r108557 = sin(r108552);
double r108558 = r108556 * r108557;
double r108559 = sin(r108555);
double r108560 = r108559 * r108553;
double r108561 = cos(r108550);
double r108562 = r108560 * r108561;
double r108563 = r108558 - r108562;
double r108564 = atan2(r108554, r108563);
return r108564;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r108565 = lambda1;
double r108566 = sin(r108565);
double r108567 = lambda2;
double r108568 = cos(r108567);
double r108569 = r108566 * r108568;
double r108570 = cos(r108565);
double r108571 = -r108567;
double r108572 = sin(r108571);
double r108573 = r108570 * r108572;
double r108574 = r108569 + r108573;
double r108575 = phi2;
double r108576 = cos(r108575);
double r108577 = r108574 * r108576;
double r108578 = phi1;
double r108579 = cos(r108578);
double r108580 = sin(r108575);
double r108581 = r108579 * r108580;
double r108582 = sin(r108578);
double r108583 = r108582 * r108576;
double r108584 = r108570 * r108568;
double r108585 = sin(r108567);
double r108586 = r108566 * r108585;
double r108587 = cbrt(r108586);
double r108588 = r108587 * r108587;
double r108589 = r108588 * r108587;
double r108590 = r108584 + r108589;
double r108591 = r108583 * r108590;
double r108592 = r108581 - r108591;
double r108593 = atan2(r108577, r108592);
return r108593;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.4
rmApplied sub-neg13.4
Applied sin-sum6.7
Simplified6.7
rmApplied cos-diff0.2
rmApplied add-cube-cbrt0.2
Final simplification0.2
herbie shell --seed 2020033
(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))))))