\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 - \frac{\left(\left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right) - \sin \lambda_1 \cdot \left(\left(\sin \lambda_2 \cdot \sin \lambda_2\right) \cdot \sin \lambda_1\right)\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)}{\cos \lambda_2 \cdot \cos \lambda_1 + \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)}}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r120528 = lambda1;
double r120529 = lambda2;
double r120530 = r120528 - r120529;
double r120531 = sin(r120530);
double r120532 = phi2;
double r120533 = cos(r120532);
double r120534 = r120531 * r120533;
double r120535 = phi1;
double r120536 = cos(r120535);
double r120537 = sin(r120532);
double r120538 = r120536 * r120537;
double r120539 = sin(r120535);
double r120540 = r120539 * r120533;
double r120541 = cos(r120530);
double r120542 = r120540 * r120541;
double r120543 = r120538 - r120542;
double r120544 = atan2(r120534, r120543);
return r120544;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r120545 = lambda1;
double r120546 = sin(r120545);
double r120547 = lambda2;
double r120548 = cos(r120547);
double r120549 = r120546 * r120548;
double r120550 = cos(r120545);
double r120551 = sin(r120547);
double r120552 = r120550 * r120551;
double r120553 = r120549 - r120552;
double r120554 = phi2;
double r120555 = cos(r120554);
double r120556 = r120553 * r120555;
double r120557 = phi1;
double r120558 = cos(r120557);
double r120559 = sin(r120554);
double r120560 = r120558 * r120559;
double r120561 = r120548 * r120550;
double r120562 = r120561 * r120561;
double r120563 = r120551 * r120551;
double r120564 = r120563 * r120546;
double r120565 = r120546 * r120564;
double r120566 = r120562 - r120565;
double r120567 = sin(r120557);
double r120568 = r120567 * r120555;
double r120569 = r120566 * r120568;
double r120570 = -r120547;
double r120571 = sin(r120570);
double r120572 = r120546 * r120571;
double r120573 = r120561 + r120572;
double r120574 = r120569 / r120573;
double r120575 = r120560 - r120574;
double r120576 = atan2(r120556, r120575);
return r120576;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 12.6
rmApplied sin-diff6.6
rmApplied sub-neg6.6
Applied cos-sum0.2
Simplified0.2
rmApplied flip--0.2
Applied associate-*r/0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019325
(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))))))