\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(\sqrt[3]{\cos \lambda_2} \cdot \left(\sin \lambda_1 \cdot \left(\mathsf{log1p}\left(\mathsf{expm1}\left(\sqrt[3]{\cos \lambda_2}\right)\right) \cdot \sqrt[3]{\cos \lambda_2}\right)\right) - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \phi_2 \cdot \sin \phi_1\right) + \left(\sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \left(\cos \phi_2 \cdot \sin \phi_1\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r3755420 = lambda1;
double r3755421 = lambda2;
double r3755422 = r3755420 - r3755421;
double r3755423 = sin(r3755422);
double r3755424 = phi2;
double r3755425 = cos(r3755424);
double r3755426 = r3755423 * r3755425;
double r3755427 = phi1;
double r3755428 = cos(r3755427);
double r3755429 = sin(r3755424);
double r3755430 = r3755428 * r3755429;
double r3755431 = sin(r3755427);
double r3755432 = r3755431 * r3755425;
double r3755433 = cos(r3755422);
double r3755434 = r3755432 * r3755433;
double r3755435 = r3755430 - r3755434;
double r3755436 = atan2(r3755426, r3755435);
return r3755436;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r3755437 = lambda2;
double r3755438 = cos(r3755437);
double r3755439 = cbrt(r3755438);
double r3755440 = lambda1;
double r3755441 = sin(r3755440);
double r3755442 = expm1(r3755439);
double r3755443 = log1p(r3755442);
double r3755444 = r3755443 * r3755439;
double r3755445 = r3755441 * r3755444;
double r3755446 = r3755439 * r3755445;
double r3755447 = cos(r3755440);
double r3755448 = sin(r3755437);
double r3755449 = r3755447 * r3755448;
double r3755450 = r3755446 - r3755449;
double r3755451 = phi2;
double r3755452 = cos(r3755451);
double r3755453 = r3755450 * r3755452;
double r3755454 = phi1;
double r3755455 = cos(r3755454);
double r3755456 = sin(r3755451);
double r3755457 = r3755455 * r3755456;
double r3755458 = r3755447 * r3755438;
double r3755459 = sin(r3755454);
double r3755460 = r3755452 * r3755459;
double r3755461 = r3755458 * r3755460;
double r3755462 = r3755448 * r3755441;
double r3755463 = r3755462 * r3755460;
double r3755464 = r3755461 + r3755463;
double r3755465 = r3755457 - r3755464;
double r3755466 = atan2(r3755453, r3755465);
return r3755466;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.2
rmApplied sin-diff6.8
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
rmApplied add-cube-cbrt0.2
Applied associate-*r*0.2
rmApplied log1p-expm1-u0.2
Final simplification0.2
herbie shell --seed 2019172 +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))))))