\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}{\mathsf{expm1}\left(\mathsf{log1p}\left(\mathsf{fma}\left(\cos \phi_1, \sin \phi_2, \sin \phi_1 \cdot \left(\left(-\cos \phi_2\right) \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right)\right)\right) + \mathsf{fma}\left(-\sin \phi_1, \cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right), \left(\cos \phi_2 \cdot \mathsf{fma}\left(\sin \lambda_2, \sin \lambda_1, \cos \lambda_2 \cdot \cos \lambda_1\right)\right) \cdot \sin \phi_1\right)\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r5916500 = lambda1;
double r5916501 = lambda2;
double r5916502 = r5916500 - r5916501;
double r5916503 = sin(r5916502);
double r5916504 = phi2;
double r5916505 = cos(r5916504);
double r5916506 = r5916503 * r5916505;
double r5916507 = phi1;
double r5916508 = cos(r5916507);
double r5916509 = sin(r5916504);
double r5916510 = r5916508 * r5916509;
double r5916511 = sin(r5916507);
double r5916512 = r5916511 * r5916505;
double r5916513 = cos(r5916502);
double r5916514 = r5916512 * r5916513;
double r5916515 = r5916510 - r5916514;
double r5916516 = atan2(r5916506, r5916515);
return r5916516;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r5916517 = lambda2;
double r5916518 = cos(r5916517);
double r5916519 = lambda1;
double r5916520 = sin(r5916519);
double r5916521 = r5916518 * r5916520;
double r5916522 = cos(r5916519);
double r5916523 = sin(r5916517);
double r5916524 = r5916522 * r5916523;
double r5916525 = r5916521 - r5916524;
double r5916526 = phi2;
double r5916527 = cos(r5916526);
double r5916528 = r5916525 * r5916527;
double r5916529 = phi1;
double r5916530 = cos(r5916529);
double r5916531 = sin(r5916526);
double r5916532 = sin(r5916529);
double r5916533 = -r5916527;
double r5916534 = r5916518 * r5916522;
double r5916535 = fma(r5916523, r5916520, r5916534);
double r5916536 = r5916533 * r5916535;
double r5916537 = r5916532 * r5916536;
double r5916538 = fma(r5916530, r5916531, r5916537);
double r5916539 = -r5916532;
double r5916540 = r5916527 * r5916535;
double r5916541 = r5916540 * r5916532;
double r5916542 = fma(r5916539, r5916540, r5916541);
double r5916543 = r5916538 + r5916542;
double r5916544 = log1p(r5916543);
double r5916545 = expm1(r5916544);
double r5916546 = atan2(r5916528, r5916545);
return r5916546;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 13.7
rmApplied sin-diff6.9
rmApplied cos-diff0.2
Applied distribute-rgt-in0.2
rmApplied expm1-log1p-u0.2
Simplified0.2
rmApplied prod-diff0.2
Final simplification0.2
herbie shell --seed 2019192 +o rules:numerics
(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))))))