\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(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left({\left(\cos \lambda_1 \cdot \cos \lambda_2\right)}^{3} - {\left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}^{3}\right)}{{\left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)\right)}^{3} + {\left(\left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) + \left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)}^{3}} \cdot \left(\left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)\right) \cdot \left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)\right) + \left(\left(\left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) + \left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right) \cdot \left(\left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) + \left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right) - \left(\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)\right) \cdot \left(\left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) + \left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)\right)\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r129451 = lambda1;
double r129452 = lambda2;
double r129453 = r129451 - r129452;
double r129454 = sin(r129453);
double r129455 = phi2;
double r129456 = cos(r129455);
double r129457 = r129454 * r129456;
double r129458 = phi1;
double r129459 = cos(r129458);
double r129460 = sin(r129455);
double r129461 = r129459 * r129460;
double r129462 = sin(r129458);
double r129463 = r129462 * r129456;
double r129464 = cos(r129453);
double r129465 = r129463 * r129464;
double r129466 = r129461 - r129465;
double r129467 = atan2(r129457, r129466);
return r129467;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r129468 = lambda1;
double r129469 = sin(r129468);
double r129470 = lambda2;
double r129471 = cos(r129470);
double r129472 = r129469 * r129471;
double r129473 = cos(r129468);
double r129474 = sin(r129470);
double r129475 = r129473 * r129474;
double r129476 = r129472 - r129475;
double r129477 = phi2;
double r129478 = cos(r129477);
double r129479 = r129476 * r129478;
double r129480 = phi1;
double r129481 = cos(r129480);
double r129482 = sin(r129477);
double r129483 = r129481 * r129482;
double r129484 = sin(r129480);
double r129485 = r129484 * r129478;
double r129486 = r129473 * r129471;
double r129487 = 3.0;
double r129488 = pow(r129486, r129487);
double r129489 = -r129470;
double r129490 = sin(r129489);
double r129491 = r129469 * r129490;
double r129492 = pow(r129491, r129487);
double r129493 = r129488 - r129492;
double r129494 = r129485 * r129493;
double r129495 = r129486 * r129486;
double r129496 = pow(r129495, r129487);
double r129497 = r129491 * r129491;
double r129498 = r129486 * r129491;
double r129499 = r129497 + r129498;
double r129500 = pow(r129499, r129487);
double r129501 = r129496 + r129500;
double r129502 = r129494 / r129501;
double r129503 = r129495 * r129495;
double r129504 = r129499 * r129499;
double r129505 = r129495 * r129499;
double r129506 = r129504 - r129505;
double r129507 = r129503 + r129506;
double r129508 = r129502 * r129507;
double r129509 = r129483 - r129508;
double r129510 = atan2(r129479, r129509);
return r129510;
}



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 sub-neg6.8
Applied cos-sum0.2
Simplified0.2
rmApplied flip3--0.2
Applied associate-*r/0.2
rmApplied flip3-+0.2
Applied associate-/r/0.2
Final simplification0.2
herbie shell --seed 2020062 +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))))))