\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 - \frac{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\left({\left(\cos \lambda_1\right)}^{2} \cdot \cos \lambda_2\right) \cdot \cos \lambda_2 - \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)\right)}{\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \lambda_2}}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r136378 = lambda1;
double r136379 = lambda2;
double r136380 = r136378 - r136379;
double r136381 = sin(r136380);
double r136382 = phi2;
double r136383 = cos(r136382);
double r136384 = r136381 * r136383;
double r136385 = phi1;
double r136386 = cos(r136385);
double r136387 = sin(r136382);
double r136388 = r136386 * r136387;
double r136389 = sin(r136385);
double r136390 = r136389 * r136383;
double r136391 = cos(r136380);
double r136392 = r136390 * r136391;
double r136393 = r136388 - r136392;
double r136394 = atan2(r136384, r136393);
return r136394;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r136395 = lambda1;
double r136396 = sin(r136395);
double r136397 = lambda2;
double r136398 = cos(r136397);
double r136399 = r136396 * r136398;
double r136400 = cos(r136395);
double r136401 = sin(r136397);
double r136402 = r136400 * r136401;
double r136403 = r136399 - r136402;
double r136404 = phi2;
double r136405 = cos(r136404);
double r136406 = r136403 * r136405;
double r136407 = phi1;
double r136408 = cos(r136407);
double r136409 = sin(r136404);
double r136410 = r136408 * r136409;
double r136411 = sin(r136407);
double r136412 = r136411 * r136405;
double r136413 = 2.0;
double r136414 = pow(r136400, r136413);
double r136415 = r136414 * r136398;
double r136416 = r136415 * r136398;
double r136417 = r136396 * r136401;
double r136418 = r136417 * r136417;
double r136419 = r136416 - r136418;
double r136420 = r136412 * r136419;
double r136421 = r136400 * r136398;
double r136422 = r136421 - r136417;
double r136423 = r136420 / r136422;
double r136424 = r136410 - r136423;
double r136425 = atan2(r136406, r136424);
return r136425;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



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