\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(\cos \lambda_2 \cdot \sin \lambda_1 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{\sin \phi_2 \cdot \cos \phi_1 - \left(\left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\cos \phi_2 \cdot \sin \phi_1\right) + \left(\sqrt[3]{\sin \lambda_2 \cdot \sin \lambda_1} \cdot \left(\sqrt[3]{\sin \lambda_2 \cdot \sin \lambda_1} \cdot \sqrt[3]{\sin \lambda_2 \cdot \sin \lambda_1}\right)\right) \cdot \left(\cos \phi_2 \cdot \sin \phi_1\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r6177497 = lambda1;
double r6177498 = lambda2;
double r6177499 = r6177497 - r6177498;
double r6177500 = sin(r6177499);
double r6177501 = phi2;
double r6177502 = cos(r6177501);
double r6177503 = r6177500 * r6177502;
double r6177504 = phi1;
double r6177505 = cos(r6177504);
double r6177506 = sin(r6177501);
double r6177507 = r6177505 * r6177506;
double r6177508 = sin(r6177504);
double r6177509 = r6177508 * r6177502;
double r6177510 = cos(r6177499);
double r6177511 = r6177509 * r6177510;
double r6177512 = r6177507 - r6177511;
double r6177513 = atan2(r6177503, r6177512);
return r6177513;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r6177514 = lambda2;
double r6177515 = cos(r6177514);
double r6177516 = lambda1;
double r6177517 = sin(r6177516);
double r6177518 = r6177515 * r6177517;
double r6177519 = cos(r6177516);
double r6177520 = sin(r6177514);
double r6177521 = r6177519 * r6177520;
double r6177522 = r6177518 - r6177521;
double r6177523 = phi2;
double r6177524 = cos(r6177523);
double r6177525 = r6177522 * r6177524;
double r6177526 = sin(r6177523);
double r6177527 = phi1;
double r6177528 = cos(r6177527);
double r6177529 = r6177526 * r6177528;
double r6177530 = r6177515 * r6177519;
double r6177531 = sin(r6177527);
double r6177532 = r6177524 * r6177531;
double r6177533 = r6177530 * r6177532;
double r6177534 = r6177520 * r6177517;
double r6177535 = cbrt(r6177534);
double r6177536 = r6177535 * r6177535;
double r6177537 = r6177535 * r6177536;
double r6177538 = r6177537 * r6177532;
double r6177539 = r6177533 + r6177538;
double r6177540 = r6177529 - r6177539;
double r6177541 = atan2(r6177525, r6177540);
return r6177541;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.3
rmApplied sin-diff6.8
rmApplied cos-diff0.2
Applied distribute-rgt-in0.2
rmApplied add-cube-cbrt0.2
Final simplification0.2
herbie shell --seed 2019163 +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))))))