\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 - \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 \lambda_2\right)}^{3}\right)}{\left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right) - \left(\cos \lambda_1 \cdot \cos \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r103361 = lambda1;
double r103362 = lambda2;
double r103363 = r103361 - r103362;
double r103364 = sin(r103363);
double r103365 = phi2;
double r103366 = cos(r103365);
double r103367 = r103364 * r103366;
double r103368 = phi1;
double r103369 = cos(r103368);
double r103370 = sin(r103365);
double r103371 = r103369 * r103370;
double r103372 = sin(r103368);
double r103373 = r103372 * r103366;
double r103374 = cos(r103363);
double r103375 = r103373 * r103374;
double r103376 = r103371 - r103375;
double r103377 = atan2(r103367, r103376);
return r103377;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r103378 = lambda1;
double r103379 = sin(r103378);
double r103380 = lambda2;
double r103381 = cos(r103380);
double r103382 = r103379 * r103381;
double r103383 = cos(r103378);
double r103384 = -r103380;
double r103385 = sin(r103384);
double r103386 = r103383 * r103385;
double r103387 = r103382 + r103386;
double r103388 = phi2;
double r103389 = cos(r103388);
double r103390 = r103387 * r103389;
double r103391 = phi1;
double r103392 = cos(r103391);
double r103393 = sin(r103388);
double r103394 = r103392 * r103393;
double r103395 = sin(r103391);
double r103396 = r103395 * r103389;
double r103397 = r103383 * r103381;
double r103398 = 3.0;
double r103399 = pow(r103397, r103398);
double r103400 = sin(r103380);
double r103401 = r103379 * r103400;
double r103402 = pow(r103401, r103398);
double r103403 = r103399 + r103402;
double r103404 = r103396 * r103403;
double r103405 = r103397 * r103397;
double r103406 = r103401 * r103401;
double r103407 = r103397 * r103401;
double r103408 = r103406 - r103407;
double r103409 = r103405 + r103408;
double r103410 = r103404 / r103409;
double r103411 = r103394 - r103410;
double r103412 = atan2(r103390, r103411);
return r103412;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 12.5
rmApplied sub-neg12.5
Applied sin-sum6.5
Simplified6.5
rmApplied cos-diff0.2
rmApplied flip3-+0.2
Applied associate-*r/0.2
Final simplification0.2
herbie shell --seed 2020003 +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))))))