\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 \left(-\lambda_2\right)\right) \cdot \cos \phi_2}{\cos \phi_1 \cdot \sin \phi_2 - \left(\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\sqrt[3]{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)} \cdot \sqrt[3]{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)}\right) \cdot \sqrt[3]{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)}\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r130038 = lambda1;
double r130039 = lambda2;
double r130040 = r130038 - r130039;
double r130041 = sin(r130040);
double r130042 = phi2;
double r130043 = cos(r130042);
double r130044 = r130041 * r130043;
double r130045 = phi1;
double r130046 = cos(r130045);
double r130047 = sin(r130042);
double r130048 = r130046 * r130047;
double r130049 = sin(r130045);
double r130050 = r130049 * r130043;
double r130051 = cos(r130040);
double r130052 = r130050 * r130051;
double r130053 = r130048 - r130052;
double r130054 = atan2(r130044, r130053);
return r130054;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r130055 = lambda1;
double r130056 = sin(r130055);
double r130057 = lambda2;
double r130058 = cos(r130057);
double r130059 = r130056 * r130058;
double r130060 = cos(r130055);
double r130061 = -r130057;
double r130062 = sin(r130061);
double r130063 = r130060 * r130062;
double r130064 = r130059 + r130063;
double r130065 = phi2;
double r130066 = cos(r130065);
double r130067 = r130064 * r130066;
double r130068 = phi1;
double r130069 = cos(r130068);
double r130070 = sin(r130065);
double r130071 = r130069 * r130070;
double r130072 = sin(r130068);
double r130073 = r130072 * r130066;
double r130074 = r130060 * r130058;
double r130075 = r130073 * r130074;
double r130076 = sin(r130057);
double r130077 = r130056 * r130076;
double r130078 = r130073 * r130077;
double r130079 = cbrt(r130078);
double r130080 = r130079 * r130079;
double r130081 = r130080 * r130079;
double r130082 = r130075 + r130081;
double r130083 = r130071 - r130082;
double r130084 = atan2(r130067, r130083);
return r130084;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.3
rmApplied sub-neg13.3
Applied sin-sum6.8
Simplified6.8
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
rmApplied add-cube-cbrt0.2
Final simplification0.2
herbie shell --seed 2020036
(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))))))