\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{\cos \phi_2 \cdot \left(\cos \lambda_2 \cdot \sin \lambda_1 - \cos \lambda_1 \cdot \sin \lambda_2\right)}{\cos \phi_1 \cdot \sin \phi_2 - \frac{\left(\left(\cos \lambda_2 \cdot \cos \lambda_1\right) \cdot \left(\cos \lambda_2 \cdot \cos \lambda_1\right) - \left(\sin \lambda_2 \cdot \sin \lambda_1\right) \cdot \left(\sin \lambda_2 \cdot \sin \lambda_1\right)\right) \cdot \left(\cos \phi_2 \cdot \sin \phi_1\right)}{\cos \lambda_2 \cdot \cos \lambda_1 - \sin \lambda_2 \cdot \sin \lambda_1}}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r4955478 = lambda1;
double r4955479 = lambda2;
double r4955480 = r4955478 - r4955479;
double r4955481 = sin(r4955480);
double r4955482 = phi2;
double r4955483 = cos(r4955482);
double r4955484 = r4955481 * r4955483;
double r4955485 = phi1;
double r4955486 = cos(r4955485);
double r4955487 = sin(r4955482);
double r4955488 = r4955486 * r4955487;
double r4955489 = sin(r4955485);
double r4955490 = r4955489 * r4955483;
double r4955491 = cos(r4955480);
double r4955492 = r4955490 * r4955491;
double r4955493 = r4955488 - r4955492;
double r4955494 = atan2(r4955484, r4955493);
return r4955494;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r4955495 = phi2;
double r4955496 = cos(r4955495);
double r4955497 = lambda2;
double r4955498 = cos(r4955497);
double r4955499 = lambda1;
double r4955500 = sin(r4955499);
double r4955501 = r4955498 * r4955500;
double r4955502 = cos(r4955499);
double r4955503 = sin(r4955497);
double r4955504 = r4955502 * r4955503;
double r4955505 = r4955501 - r4955504;
double r4955506 = r4955496 * r4955505;
double r4955507 = phi1;
double r4955508 = cos(r4955507);
double r4955509 = sin(r4955495);
double r4955510 = r4955508 * r4955509;
double r4955511 = r4955498 * r4955502;
double r4955512 = r4955511 * r4955511;
double r4955513 = r4955503 * r4955500;
double r4955514 = r4955513 * r4955513;
double r4955515 = r4955512 - r4955514;
double r4955516 = sin(r4955507);
double r4955517 = r4955496 * r4955516;
double r4955518 = r4955515 * r4955517;
double r4955519 = r4955511 - r4955513;
double r4955520 = r4955518 / r4955519;
double r4955521 = r4955510 - r4955520;
double r4955522 = atan2(r4955506, r4955521);
return r4955522;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.1
rmApplied sin-diff6.7
rmApplied cos-diff0.2
rmApplied flip-+0.2
Applied associate-*r/0.2
Final simplification0.2
herbie shell --seed 2019200
(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))))))