\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 \mathsf{fma}\left(\sin \lambda_1, \cos \lambda_2, \left(-\sin \lambda_2\right) \cdot \cos \lambda_1\right)}{\mathsf{log1p}\left(\mathsf{expm1}\left(\cos \phi_1 \cdot \sin \phi_2\right)\right) - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2 - \sin \lambda_1 \cdot \sin \left(-\lambda_2\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r78301 = lambda1;
double r78302 = lambda2;
double r78303 = r78301 - r78302;
double r78304 = sin(r78303);
double r78305 = phi2;
double r78306 = cos(r78305);
double r78307 = r78304 * r78306;
double r78308 = phi1;
double r78309 = cos(r78308);
double r78310 = sin(r78305);
double r78311 = r78309 * r78310;
double r78312 = sin(r78308);
double r78313 = r78312 * r78306;
double r78314 = cos(r78303);
double r78315 = r78313 * r78314;
double r78316 = r78311 - r78315;
double r78317 = atan2(r78307, r78316);
return r78317;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r78318 = phi2;
double r78319 = cos(r78318);
double r78320 = lambda1;
double r78321 = sin(r78320);
double r78322 = lambda2;
double r78323 = cos(r78322);
double r78324 = sin(r78322);
double r78325 = -r78324;
double r78326 = cos(r78320);
double r78327 = r78325 * r78326;
double r78328 = fma(r78321, r78323, r78327);
double r78329 = r78319 * r78328;
double r78330 = phi1;
double r78331 = cos(r78330);
double r78332 = sin(r78318);
double r78333 = r78331 * r78332;
double r78334 = expm1(r78333);
double r78335 = log1p(r78334);
double r78336 = sin(r78330);
double r78337 = r78336 * r78319;
double r78338 = r78326 * r78323;
double r78339 = -r78322;
double r78340 = sin(r78339);
double r78341 = r78321 * r78340;
double r78342 = r78338 - r78341;
double r78343 = r78337 * r78342;
double r78344 = r78335 - r78343;
double r78345 = atan2(r78329, r78344);
return r78345;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Initial program 13.5
rmApplied sub-neg13.5
Applied sin-sum7.0
Simplified7.0
rmApplied sub-neg7.0
Applied cos-sum0.2
Simplified0.2
Taylor expanded around inf 0.2
Simplified0.2
rmApplied log1p-expm1-u0.2
Final simplification0.2
herbie shell --seed 2019322 +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))))))