\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 - \frac{\left(\sin \phi_1 \cdot \cos \phi_2\right) \cdot \left({\left(\cos \lambda_1 \cdot \cos \lambda_2\right)}^{3} + {\left(\sin \lambda_1 \cdot \sin \lambda_2\right)}^{3}\right)}{\left(\sin \lambda_1 \cdot \sin \lambda_2\right) \cdot \left(\sin \lambda_1 \cdot \sin \lambda_2 - \cos \lambda_1 \cdot \cos \lambda_2\right) + {\left(\cos \lambda_1\right)}^{2} \cdot {\left(\cos \lambda_2\right)}^{2}}}double f(double lambda1, double lambda2, double phi1, double phi2) {
double r153178 = lambda1;
double r153179 = lambda2;
double r153180 = r153178 - r153179;
double r153181 = sin(r153180);
double r153182 = phi2;
double r153183 = cos(r153182);
double r153184 = r153181 * r153183;
double r153185 = phi1;
double r153186 = cos(r153185);
double r153187 = sin(r153182);
double r153188 = r153186 * r153187;
double r153189 = sin(r153185);
double r153190 = r153189 * r153183;
double r153191 = cos(r153180);
double r153192 = r153190 * r153191;
double r153193 = r153188 - r153192;
double r153194 = atan2(r153184, r153193);
return r153194;
}
double f(double lambda1, double lambda2, double phi1, double phi2) {
double r153195 = lambda1;
double r153196 = sin(r153195);
double r153197 = lambda2;
double r153198 = cos(r153197);
double r153199 = r153196 * r153198;
double r153200 = cos(r153195);
double r153201 = sin(r153197);
double r153202 = r153200 * r153201;
double r153203 = r153199 - r153202;
double r153204 = phi2;
double r153205 = cos(r153204);
double r153206 = r153203 * r153205;
double r153207 = phi1;
double r153208 = cos(r153207);
double r153209 = sin(r153204);
double r153210 = r153208 * r153209;
double r153211 = sin(r153207);
double r153212 = r153211 * r153205;
double r153213 = r153200 * r153198;
double r153214 = 3.0;
double r153215 = pow(r153213, r153214);
double r153216 = r153196 * r153201;
double r153217 = pow(r153216, r153214);
double r153218 = r153215 + r153217;
double r153219 = r153212 * r153218;
double r153220 = r153216 - r153213;
double r153221 = r153216 * r153220;
double r153222 = 2.0;
double r153223 = pow(r153200, r153222);
double r153224 = pow(r153198, r153222);
double r153225 = r153223 * r153224;
double r153226 = r153221 + r153225;
double r153227 = r153219 / r153226;
double r153228 = r153210 - r153227;
double r153229 = atan2(r153206, r153228);
return r153229;
}



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 13.6
rmApplied sin-diff6.9
rmApplied cos-diff0.2
rmApplied flip3-+0.2
Applied associate-*r/0.2
Taylor expanded around inf 0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2020056
(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))))))