\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(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 - \mathsf{log1p}\left(\mathsf{expm1}\left(\left(\sqrt[3]{\sin \lambda_1} \cdot \sqrt[3]{\sin \lambda_1}\right) \cdot \left(\sqrt[3]{\sin \lambda_1} \cdot \sin \left(-\lambda_2\right)\right)\right)\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r98538 = lambda1;
double r98539 = lambda2;
double r98540 = r98538 - r98539;
double r98541 = sin(r98540);
double r98542 = phi2;
double r98543 = cos(r98542);
double r98544 = r98541 * r98543;
double r98545 = phi1;
double r98546 = cos(r98545);
double r98547 = sin(r98542);
double r98548 = r98546 * r98547;
double r98549 = sin(r98545);
double r98550 = r98549 * r98543;
double r98551 = cos(r98540);
double r98552 = r98550 * r98551;
double r98553 = r98548 - r98552;
double r98554 = atan2(r98544, r98553);
return r98554;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r98555 = lambda1;
double r98556 = sin(r98555);
double r98557 = lambda2;
double r98558 = cos(r98557);
double r98559 = r98556 * r98558;
double r98560 = cos(r98555);
double r98561 = sin(r98557);
double r98562 = r98560 * r98561;
double r98563 = r98559 - r98562;
double r98564 = phi2;
double r98565 = cos(r98564);
double r98566 = r98563 * r98565;
double r98567 = phi1;
double r98568 = cos(r98567);
double r98569 = sin(r98564);
double r98570 = r98568 * r98569;
double r98571 = sin(r98567);
double r98572 = r98571 * r98565;
double r98573 = r98560 * r98558;
double r98574 = cbrt(r98556);
double r98575 = r98574 * r98574;
double r98576 = -r98557;
double r98577 = sin(r98576);
double r98578 = r98574 * r98577;
double r98579 = r98575 * r98578;
double r98580 = expm1(r98579);
double r98581 = log1p(r98580);
double r98582 = r98573 - r98581;
double r98583 = r98572 * r98582;
double r98584 = r98570 - r98583;
double r98585 = atan2(r98566, r98584);
return r98585;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.1
rmApplied sin-diff6.8
rmApplied sub-neg6.8
Applied cos-sum0.2
Simplified0.2
rmApplied log1p-expm1-u0.2
rmApplied add-cube-cbrt0.2
Applied associate-*l*0.2
Final simplification0.2
herbie shell --seed 2020047 +o rules:numerics
(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))))))