\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(\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 r110362 = lambda1;
double r110363 = lambda2;
double r110364 = r110362 - r110363;
double r110365 = sin(r110364);
double r110366 = phi2;
double r110367 = cos(r110366);
double r110368 = r110365 * r110367;
double r110369 = phi1;
double r110370 = cos(r110369);
double r110371 = sin(r110366);
double r110372 = r110370 * r110371;
double r110373 = sin(r110369);
double r110374 = r110373 * r110367;
double r110375 = cos(r110364);
double r110376 = r110374 * r110375;
double r110377 = r110372 - r110376;
double r110378 = atan2(r110368, r110377);
return r110378;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r110379 = lambda1;
double r110380 = sin(r110379);
double r110381 = lambda2;
double r110382 = cos(r110381);
double r110383 = r110380 * r110382;
double r110384 = cos(r110379);
double r110385 = sin(r110381);
double r110386 = r110384 * r110385;
double r110387 = r110383 - r110386;
double r110388 = phi2;
double r110389 = cos(r110388);
double r110390 = r110387 * r110389;
double r110391 = phi1;
double r110392 = cos(r110391);
double r110393 = sin(r110388);
double r110394 = r110392 * r110393;
double r110395 = sin(r110391);
double r110396 = cbrt(r110395);
double r110397 = r110396 * r110396;
double r110398 = r110384 * r110382;
double r110399 = r110389 * r110398;
double r110400 = r110396 * r110399;
double r110401 = r110397 * r110400;
double r110402 = r110380 * r110385;
double r110403 = r110395 * r110389;
double r110404 = r110402 * r110403;
double r110405 = r110401 + r110404;
double r110406 = r110394 - r110405;
double r110407 = atan2(r110390, r110406);
return r110407;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.5
rmApplied sin-diff6.9
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
Simplified0.2
Simplified0.2
Taylor expanded around inf 0.2
Simplified0.2
rmApplied add-cube-cbrt0.3
Applied associate-*l*0.3
Final simplification0.3
herbie shell --seed 2019326
(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))))))