\lambda_1 + \tan^{-1}_* \frac{\left(\sin theta \cdot \sin delta\right) \cdot \cos \phi_1}{\cos delta - \sin \phi_1 \cdot \sin \left(\sin^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right)}\lambda_1 + \tan^{-1}_* \frac{\left(\sin theta \cdot \sin delta\right) \cdot \cos \phi_1}{\cos delta - \sin \phi_1 \cdot \sin \left(\frac{\pi}{2} - \cos^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right)}double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r65214 = lambda1;
double r65215 = theta;
double r65216 = sin(r65215);
double r65217 = delta;
double r65218 = sin(r65217);
double r65219 = r65216 * r65218;
double r65220 = phi1;
double r65221 = cos(r65220);
double r65222 = r65219 * r65221;
double r65223 = cos(r65217);
double r65224 = sin(r65220);
double r65225 = r65224 * r65223;
double r65226 = r65221 * r65218;
double r65227 = cos(r65215);
double r65228 = r65226 * r65227;
double r65229 = r65225 + r65228;
double r65230 = asin(r65229);
double r65231 = sin(r65230);
double r65232 = r65224 * r65231;
double r65233 = r65223 - r65232;
double r65234 = atan2(r65222, r65233);
double r65235 = r65214 + r65234;
return r65235;
}
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r65236 = lambda1;
double r65237 = theta;
double r65238 = sin(r65237);
double r65239 = delta;
double r65240 = sin(r65239);
double r65241 = r65238 * r65240;
double r65242 = phi1;
double r65243 = cos(r65242);
double r65244 = r65241 * r65243;
double r65245 = cos(r65239);
double r65246 = sin(r65242);
double r65247 = atan2(1.0, 0.0);
double r65248 = 2.0;
double r65249 = r65247 / r65248;
double r65250 = r65246 * r65245;
double r65251 = r65243 * r65240;
double r65252 = cos(r65237);
double r65253 = r65251 * r65252;
double r65254 = r65250 + r65253;
double r65255 = acos(r65254);
double r65256 = r65249 - r65255;
double r65257 = sin(r65256);
double r65258 = r65246 * r65257;
double r65259 = r65245 - r65258;
double r65260 = atan2(r65244, r65259);
double r65261 = r65236 + r65260;
return r65261;
}



Bits error versus lambda1



Bits error versus phi1



Bits error versus phi2



Bits error versus delta



Bits error versus theta
Results
Initial program 0.2
rmApplied asin-acos0.2
Final simplification0.2
herbie shell --seed 2019199
(FPCore (lambda1 phi1 phi2 delta theta)
:name "Destination given bearing on a great circle"
(+ lambda1 (atan2 (* (* (sin theta) (sin delta)) (cos phi1)) (- (cos delta) (* (sin phi1) (sin (asin (+ (* (sin phi1) (cos delta)) (* (* (cos phi1) (sin delta)) (cos theta))))))))))