\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(\sin theta \cdot \sin delta\right) \cdot \cos \phi_1}{\mathsf{fma}\left(\cos delta, \cos delta, -{\left(\mathsf{fma}\left(\cos \phi_1, \cos theta \cdot \sin delta, \sin \phi_1 \cdot \cos delta\right)\right)}^{2} \cdot {\left(\sin \phi_1\right)}^{2}\right) \cdot \frac{1}{\mathsf{fma}\left(\sin \phi_1, \mathsf{fma}\left(\cos delta, \sin \phi_1, \left(\cos theta \cdot \cos \phi_1\right) \cdot \sin delta\right), \cos delta\right)}} + \lambda_1double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r96157 = lambda1;
double r96158 = theta;
double r96159 = sin(r96158);
double r96160 = delta;
double r96161 = sin(r96160);
double r96162 = r96159 * r96161;
double r96163 = phi1;
double r96164 = cos(r96163);
double r96165 = r96162 * r96164;
double r96166 = cos(r96160);
double r96167 = sin(r96163);
double r96168 = r96167 * r96166;
double r96169 = r96164 * r96161;
double r96170 = cos(r96158);
double r96171 = r96169 * r96170;
double r96172 = r96168 + r96171;
double r96173 = asin(r96172);
double r96174 = sin(r96173);
double r96175 = r96167 * r96174;
double r96176 = r96166 - r96175;
double r96177 = atan2(r96165, r96176);
double r96178 = r96157 + r96177;
return r96178;
}
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r96179 = theta;
double r96180 = sin(r96179);
double r96181 = delta;
double r96182 = sin(r96181);
double r96183 = r96180 * r96182;
double r96184 = phi1;
double r96185 = cos(r96184);
double r96186 = r96183 * r96185;
double r96187 = cos(r96181);
double r96188 = cos(r96179);
double r96189 = r96188 * r96182;
double r96190 = sin(r96184);
double r96191 = r96190 * r96187;
double r96192 = fma(r96185, r96189, r96191);
double r96193 = 2.0;
double r96194 = pow(r96192, r96193);
double r96195 = pow(r96190, r96193);
double r96196 = r96194 * r96195;
double r96197 = -r96196;
double r96198 = fma(r96187, r96187, r96197);
double r96199 = 1.0;
double r96200 = r96188 * r96185;
double r96201 = r96200 * r96182;
double r96202 = fma(r96187, r96190, r96201);
double r96203 = fma(r96190, r96202, r96187);
double r96204 = r96199 / r96203;
double r96205 = r96198 * r96204;
double r96206 = atan2(r96186, r96205);
double r96207 = lambda1;
double r96208 = r96206 + r96207;
return r96208;
}



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.1
Taylor expanded around inf 0.2
Simplified0.2
rmApplied flip--0.2
Simplified0.2
Simplified0.2
rmApplied fma-neg0.2
Simplified0.2
rmApplied div-inv0.2
Final simplification0.2
herbie shell --seed 2019195 +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))))))))))