\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 \left(-\lambda_2\right)\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\sin \phi_1 \cdot \left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)\right) + \left(\left(\sqrt[3]{\sin \lambda_1} \cdot \sqrt[3]{\sin \lambda_1}\right) \cdot \left(\sqrt[3]{\sin \lambda_1} \cdot \sin \lambda_2\right)\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r82427 = lambda1;
double r82428 = lambda2;
double r82429 = r82427 - r82428;
double r82430 = sin(r82429);
double r82431 = phi2;
double r82432 = cos(r82431);
double r82433 = r82430 * r82432;
double r82434 = phi1;
double r82435 = cos(r82434);
double r82436 = sin(r82431);
double r82437 = r82435 * r82436;
double r82438 = sin(r82434);
double r82439 = r82438 * r82432;
double r82440 = cos(r82429);
double r82441 = r82439 * r82440;
double r82442 = r82437 - r82441;
double r82443 = atan2(r82433, r82442);
return r82443;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r82444 = lambda1;
double r82445 = sin(r82444);
double r82446 = lambda2;
double r82447 = cos(r82446);
double r82448 = r82445 * r82447;
double r82449 = cos(r82444);
double r82450 = -r82446;
double r82451 = sin(r82450);
double r82452 = r82449 * r82451;
double r82453 = r82448 + r82452;
double r82454 = phi2;
double r82455 = cos(r82454);
double r82456 = r82453 * r82455;
double r82457 = phi1;
double r82458 = cos(r82457);
double r82459 = sin(r82454);
double r82460 = r82458 * r82459;
double r82461 = sin(r82457);
double r82462 = r82449 * r82447;
double r82463 = r82455 * r82462;
double r82464 = r82461 * r82463;
double r82465 = cbrt(r82445);
double r82466 = r82465 * r82465;
double r82467 = sin(r82446);
double r82468 = r82465 * r82467;
double r82469 = r82466 * r82468;
double r82470 = r82461 * r82455;
double r82471 = r82469 * r82470;
double r82472 = r82464 + r82471;
double r82473 = r82460 - r82472;
double r82474 = atan2(r82456, r82473);
return r82474;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.4
rmApplied sub-neg13.4
Applied sin-sum7.0
Simplified7.0
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
Simplified0.2
rmApplied associate-*l*0.2
rmApplied add-cube-cbrt0.2
Applied associate-*l*0.2
Final simplification0.2
herbie shell --seed 2019306 +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))))))