\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(\left(\sqrt[3]{\sin \phi_1} \cdot \sqrt[3]{\sin \phi_1}\right) \cdot \left(\sqrt[3]{\sin \phi_1} \cdot \left(\cos \phi_2 \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)\right)\right) + \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r90291 = lambda1;
double r90292 = lambda2;
double r90293 = r90291 - r90292;
double r90294 = sin(r90293);
double r90295 = phi2;
double r90296 = cos(r90295);
double r90297 = r90294 * r90296;
double r90298 = phi1;
double r90299 = cos(r90298);
double r90300 = sin(r90295);
double r90301 = r90299 * r90300;
double r90302 = sin(r90298);
double r90303 = r90302 * r90296;
double r90304 = cos(r90293);
double r90305 = r90303 * r90304;
double r90306 = r90301 - r90305;
double r90307 = atan2(r90297, r90306);
return r90307;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r90308 = lambda1;
double r90309 = sin(r90308);
double r90310 = lambda2;
double r90311 = cos(r90310);
double r90312 = r90309 * r90311;
double r90313 = cos(r90308);
double r90314 = -r90310;
double r90315 = sin(r90314);
double r90316 = r90313 * r90315;
double r90317 = r90312 + r90316;
double r90318 = phi2;
double r90319 = cos(r90318);
double r90320 = r90317 * r90319;
double r90321 = phi1;
double r90322 = cos(r90321);
double r90323 = sin(r90318);
double r90324 = r90322 * r90323;
double r90325 = sin(r90321);
double r90326 = cbrt(r90325);
double r90327 = r90326 * r90326;
double r90328 = r90313 * r90311;
double r90329 = r90319 * r90328;
double r90330 = r90326 * r90329;
double r90331 = r90327 * r90330;
double r90332 = sin(r90310);
double r90333 = r90309 * r90332;
double r90334 = r90325 * r90319;
double r90335 = r90333 * r90334;
double r90336 = r90331 + r90335;
double r90337 = r90324 - r90336;
double r90338 = atan2(r90320, r90337);
return r90338;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.5
rmApplied sub-neg13.5
Applied sin-sum6.9
Simplified6.9
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
Simplified0.2
rmApplied associate-*l*0.2
rmApplied add-cube-cbrt0.3
Applied associate-*l*0.3
Final simplification0.3
herbie shell --seed 2019326 +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))))))