\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 - \left(\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\cos \lambda_1 \cdot \cos \lambda_2\right) + \left(\log \left(\sqrt{e^{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)}}\right) + \log \left(\sqrt{e^{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2\right)}}\right)\right)\right)}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r97181 = lambda1;
double r97182 = lambda2;
double r97183 = r97181 - r97182;
double r97184 = sin(r97183);
double r97185 = phi2;
double r97186 = cos(r97185);
double r97187 = r97184 * r97186;
double r97188 = phi1;
double r97189 = cos(r97188);
double r97190 = sin(r97185);
double r97191 = r97189 * r97190;
double r97192 = sin(r97188);
double r97193 = r97192 * r97186;
double r97194 = cos(r97183);
double r97195 = r97193 * r97194;
double r97196 = r97191 - r97195;
double r97197 = atan2(r97187, r97196);
return r97197;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r97198 = lambda1;
double r97199 = sin(r97198);
double r97200 = lambda2;
double r97201 = cos(r97200);
double r97202 = r97199 * r97201;
double r97203 = cos(r97198);
double r97204 = sin(r97200);
double r97205 = r97203 * r97204;
double r97206 = r97202 - r97205;
double r97207 = phi2;
double r97208 = cos(r97207);
double r97209 = r97206 * r97208;
double r97210 = phi1;
double r97211 = cos(r97210);
double r97212 = sin(r97207);
double r97213 = r97211 * r97212;
double r97214 = sin(r97210);
double r97215 = r97214 * r97208;
double r97216 = r97203 * r97201;
double r97217 = r97215 * r97216;
double r97218 = r97199 * r97204;
double r97219 = r97215 * r97218;
double r97220 = exp(r97219);
double r97221 = sqrt(r97220);
double r97222 = log(r97221);
double r97223 = r97222 + r97222;
double r97224 = r97217 + r97223;
double r97225 = r97213 - r97224;
double r97226 = atan2(r97209, r97225);
return r97226;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.0
rmApplied sin-diff6.6
rmApplied cos-diff0.2
Applied distribute-lft-in0.2
rmApplied add-log-exp0.2
rmApplied add-sqr-sqrt0.2
Applied log-prod0.2
Final simplification0.2
herbie shell --seed 2019356 +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))))))