\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)}\tan^{-1}_* \frac{\left(\cos \phi_1 \cdot \sin delta\right) \cdot \sin theta}{\cos delta - \mathsf{fma}\left(\sin delta, \cos theta \cdot \cos \phi_1, \cos delta \cdot \sin \phi_1\right) \cdot \sin \phi_1} + \lambda_1double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r2706035 = lambda1;
double r2706036 = theta;
double r2706037 = sin(r2706036);
double r2706038 = delta;
double r2706039 = sin(r2706038);
double r2706040 = r2706037 * r2706039;
double r2706041 = phi1;
double r2706042 = cos(r2706041);
double r2706043 = r2706040 * r2706042;
double r2706044 = cos(r2706038);
double r2706045 = sin(r2706041);
double r2706046 = r2706045 * r2706044;
double r2706047 = r2706042 * r2706039;
double r2706048 = cos(r2706036);
double r2706049 = r2706047 * r2706048;
double r2706050 = r2706046 + r2706049;
double r2706051 = asin(r2706050);
double r2706052 = sin(r2706051);
double r2706053 = r2706045 * r2706052;
double r2706054 = r2706044 - r2706053;
double r2706055 = atan2(r2706043, r2706054);
double r2706056 = r2706035 + r2706055;
return r2706056;
}
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r2706057 = phi1;
double r2706058 = cos(r2706057);
double r2706059 = delta;
double r2706060 = sin(r2706059);
double r2706061 = r2706058 * r2706060;
double r2706062 = theta;
double r2706063 = sin(r2706062);
double r2706064 = r2706061 * r2706063;
double r2706065 = cos(r2706059);
double r2706066 = cos(r2706062);
double r2706067 = r2706066 * r2706058;
double r2706068 = sin(r2706057);
double r2706069 = r2706065 * r2706068;
double r2706070 = fma(r2706060, r2706067, r2706069);
double r2706071 = r2706070 * r2706068;
double r2706072 = r2706065 - r2706071;
double r2706073 = atan2(r2706064, r2706072);
double r2706074 = lambda1;
double r2706075 = r2706073 + r2706074;
return r2706075;
}



Bits error versus lambda1



Bits error versus phi1



Bits error versus phi2



Bits error versus delta



Bits error versus theta
Initial program 0.2
Simplified0.2
Taylor expanded around inf 0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019200 +o rules:numerics
(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))))))))))