\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(\cos \lambda_2 \cdot \sin \lambda_1 - \cos \lambda_1 \cdot \sin \lambda_2\right) \cdot \cos \phi_2}{\sin \phi_2 \cdot \cos \phi_1 - \left(\log \left(e^{\left(\sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)}\right) + \left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r2238318 = lambda1;
double r2238319 = lambda2;
double r2238320 = r2238318 - r2238319;
double r2238321 = sin(r2238320);
double r2238322 = phi2;
double r2238323 = cos(r2238322);
double r2238324 = r2238321 * r2238323;
double r2238325 = phi1;
double r2238326 = cos(r2238325);
double r2238327 = sin(r2238322);
double r2238328 = r2238326 * r2238327;
double r2238329 = sin(r2238325);
double r2238330 = r2238329 * r2238323;
double r2238331 = cos(r2238320);
double r2238332 = r2238330 * r2238331;
double r2238333 = r2238328 - r2238332;
double r2238334 = atan2(r2238324, r2238333);
return r2238334;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r2238335 = lambda2;
double r2238336 = cos(r2238335);
double r2238337 = lambda1;
double r2238338 = sin(r2238337);
double r2238339 = r2238336 * r2238338;
double r2238340 = cos(r2238337);
double r2238341 = sin(r2238335);
double r2238342 = r2238340 * r2238341;
double r2238343 = r2238339 - r2238342;
double r2238344 = phi2;
double r2238345 = cos(r2238344);
double r2238346 = r2238343 * r2238345;
double r2238347 = sin(r2238344);
double r2238348 = phi1;
double r2238349 = cos(r2238348);
double r2238350 = r2238347 * r2238349;
double r2238351 = r2238341 * r2238338;
double r2238352 = sin(r2238348);
double r2238353 = r2238352 * r2238345;
double r2238354 = r2238351 * r2238353;
double r2238355 = exp(r2238354);
double r2238356 = log(r2238355);
double r2238357 = r2238336 * r2238340;
double r2238358 = r2238357 * r2238353;
double r2238359 = r2238356 + r2238358;
double r2238360 = r2238350 - r2238359;
double r2238361 = atan2(r2238346, r2238360);
return r2238361;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.4
rmApplied sin-diff6.9
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
rmApplied add-log-exp0.2
Final simplification0.2
herbie shell --seed 2019152
(FPCore (lambda1 lambda2 phi1 phi2)
:name "Bearing on a great circle"
(atan2 (* (sin (- lambda1 lambda2)) (cos phi2)) (- (* (cos phi1) (sin phi2)) (* (* (sin phi1) (cos phi2)) (cos (- lambda1 lambda2))))))