\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 \left(\mathsf{log1p}\left(\mathsf{expm1}\left(\sin^{-1} \left(\mathsf{fma}\left(\sin \phi_1, \cos delta, \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right)\right)\right)\right) \cdot \sin \phi_1}double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r71138 = lambda1;
double r71139 = theta;
double r71140 = sin(r71139);
double r71141 = delta;
double r71142 = sin(r71141);
double r71143 = r71140 * r71142;
double r71144 = phi1;
double r71145 = cos(r71144);
double r71146 = r71143 * r71145;
double r71147 = cos(r71141);
double r71148 = sin(r71144);
double r71149 = r71148 * r71147;
double r71150 = r71145 * r71142;
double r71151 = cos(r71139);
double r71152 = r71150 * r71151;
double r71153 = r71149 + r71152;
double r71154 = asin(r71153);
double r71155 = sin(r71154);
double r71156 = r71148 * r71155;
double r71157 = r71147 - r71156;
double r71158 = atan2(r71146, r71157);
double r71159 = r71138 + r71158;
return r71159;
}
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r71160 = lambda1;
double r71161 = theta;
double r71162 = sin(r71161);
double r71163 = delta;
double r71164 = sin(r71163);
double r71165 = r71162 * r71164;
double r71166 = phi1;
double r71167 = cos(r71166);
double r71168 = r71165 * r71167;
double r71169 = cos(r71163);
double r71170 = sin(r71166);
double r71171 = r71167 * r71164;
double r71172 = cos(r71161);
double r71173 = r71171 * r71172;
double r71174 = fma(r71170, r71169, r71173);
double r71175 = asin(r71174);
double r71176 = expm1(r71175);
double r71177 = log1p(r71176);
double r71178 = sin(r71177);
double r71179 = r71178 * r71170;
double r71180 = r71169 - r71179;
double r71181 = atan2(r71168, r71180);
double r71182 = r71160 + r71181;
return r71182;
}



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
rmApplied log1p-expm1-u0.2
Final simplification0.2
herbie shell --seed 2019212 +o rules:numerics
(FPCore (lambda1 phi1 phi2 delta theta)
:name "Destination given bearing on a great circle"
:precision binary64
(+ lambda1 (atan2 (* (* (sin theta) (sin delta)) (cos phi1)) (- (cos delta) (* (sin phi1) (sin (asin (+ (* (sin phi1) (cos delta)) (* (* (cos phi1) (sin delta)) (cos theta))))))))))