\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 - \left({\left({\left(\sqrt[3]{\left(\cos \lambda_2 \cdot \sin \phi_1\right) \cdot \left(\cos \phi_2 \cdot \cos \lambda_1\right)}\right)}^{6}\right)}^{\frac{1}{3}} \cdot \sqrt[3]{\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\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 r78340 = lambda1;
double r78341 = lambda2;
double r78342 = r78340 - r78341;
double r78343 = sin(r78342);
double r78344 = phi2;
double r78345 = cos(r78344);
double r78346 = r78343 * r78345;
double r78347 = phi1;
double r78348 = cos(r78347);
double r78349 = sin(r78344);
double r78350 = r78348 * r78349;
double r78351 = sin(r78347);
double r78352 = r78351 * r78345;
double r78353 = cos(r78342);
double r78354 = r78352 * r78353;
double r78355 = r78350 - r78354;
double r78356 = atan2(r78346, r78355);
return r78356;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r78357 = lambda1;
double r78358 = sin(r78357);
double r78359 = lambda2;
double r78360 = cos(r78359);
double r78361 = r78358 * r78360;
double r78362 = cos(r78357);
double r78363 = sin(r78359);
double r78364 = r78362 * r78363;
double r78365 = r78361 - r78364;
double r78366 = phi2;
double r78367 = cos(r78366);
double r78368 = r78365 * r78367;
double r78369 = phi1;
double r78370 = cos(r78369);
double r78371 = sin(r78366);
double r78372 = r78370 * r78371;
double r78373 = sin(r78369);
double r78374 = r78360 * r78373;
double r78375 = r78367 * r78362;
double r78376 = r78374 * r78375;
double r78377 = cbrt(r78376);
double r78378 = 6.0;
double r78379 = pow(r78377, r78378);
double r78380 = 0.3333333333333333;
double r78381 = pow(r78379, r78380);
double r78382 = r78362 * r78360;
double r78383 = r78373 * r78367;
double r78384 = r78382 * r78383;
double r78385 = cbrt(r78384);
double r78386 = r78381 * r78385;
double r78387 = r78358 * r78363;
double r78388 = r78387 * r78383;
double r78389 = r78386 + r78388;
double r78390 = r78372 - r78389;
double r78391 = atan2(r78368, r78390);
return r78391;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.0
rmApplied sin-diff6.6
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
Simplified0.2
Simplified0.2
rmApplied add-cube-cbrt0.3
rmApplied pow1/332.6
Applied pow1/332.6
Applied pow-prod-down0.3
Simplified0.4
Final simplification0.4
herbie shell --seed 2019303
(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))))))