\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(\mathsf{expm1}\left(\mathsf{log1p}\left(\sin \lambda_1 \cdot \cos \lambda_2\right)\right) + \cos \lambda_1 \cdot \sin \left(-\lambda_2\right)\right) \cdot \cos \phi_2}{\left(\cos \phi_1 \cdot \sin \phi_2 - \left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right)\right) - \left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \phi_1 \cdot \cos \phi_2\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r78357 = lambda1;
double r78358 = lambda2;
double r78359 = r78357 - r78358;
double r78360 = sin(r78359);
double r78361 = phi2;
double r78362 = cos(r78361);
double r78363 = r78360 * r78362;
double r78364 = phi1;
double r78365 = cos(r78364);
double r78366 = sin(r78361);
double r78367 = r78365 * r78366;
double r78368 = sin(r78364);
double r78369 = r78368 * r78362;
double r78370 = cos(r78359);
double r78371 = r78369 * r78370;
double r78372 = r78367 - r78371;
double r78373 = atan2(r78363, r78372);
return r78373;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r78374 = lambda1;
double r78375 = sin(r78374);
double r78376 = lambda2;
double r78377 = cos(r78376);
double r78378 = r78375 * r78377;
double r78379 = log1p(r78378);
double r78380 = expm1(r78379);
double r78381 = cos(r78374);
double r78382 = -r78376;
double r78383 = sin(r78382);
double r78384 = r78381 * r78383;
double r78385 = r78380 + r78384;
double r78386 = phi2;
double r78387 = cos(r78386);
double r78388 = r78385 * r78387;
double r78389 = phi1;
double r78390 = cos(r78389);
double r78391 = sin(r78386);
double r78392 = r78390 * r78391;
double r78393 = sin(r78389);
double r78394 = r78393 * r78387;
double r78395 = r78381 * r78377;
double r78396 = r78394 * r78395;
double r78397 = r78392 - r78396;
double r78398 = sin(r78376);
double r78399 = r78375 * r78398;
double r78400 = r78399 * r78394;
double r78401 = r78397 - r78400;
double r78402 = atan2(r78388, r78401);
return r78402;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.5
rmApplied sub-neg13.5
Applied sin-sum6.9
Simplified6.9
rmApplied cos-diff0.2
Applied distribute-rgt-in0.2
Applied associate--r+0.2
Simplified0.2
rmApplied expm1-log1p-u0.2
Final simplification0.2
herbie shell --seed 2019323 +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))))))