\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}{\frac{{\left(\cos delta\right)}^{3} - \mathsf{expm1}\left(\mathsf{log1p}\left({\left(\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)\right)}^{3}\right)\right)}{\mathsf{fma}\left(\cos delta, \cos delta, \sin \phi_1 \cdot \left(\sin \left(\sin^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right) \cdot \mathsf{fma}\left(\sin \phi_1, \sin \left(\sin^{-1} \left(\sin \phi_1 \cdot \cos delta + \left(\cos \phi_1 \cdot \sin delta\right) \cdot \cos theta\right)\right), \cos delta\right)\right)\right)}}double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r69120 = lambda1;
double r69121 = theta;
double r69122 = sin(r69121);
double r69123 = delta;
double r69124 = sin(r69123);
double r69125 = r69122 * r69124;
double r69126 = phi1;
double r69127 = cos(r69126);
double r69128 = r69125 * r69127;
double r69129 = cos(r69123);
double r69130 = sin(r69126);
double r69131 = r69130 * r69129;
double r69132 = r69127 * r69124;
double r69133 = cos(r69121);
double r69134 = r69132 * r69133;
double r69135 = r69131 + r69134;
double r69136 = asin(r69135);
double r69137 = sin(r69136);
double r69138 = r69130 * r69137;
double r69139 = r69129 - r69138;
double r69140 = atan2(r69128, r69139);
double r69141 = r69120 + r69140;
return r69141;
}
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
double r69142 = lambda1;
double r69143 = theta;
double r69144 = sin(r69143);
double r69145 = delta;
double r69146 = sin(r69145);
double r69147 = r69144 * r69146;
double r69148 = phi1;
double r69149 = cos(r69148);
double r69150 = r69147 * r69149;
double r69151 = cos(r69145);
double r69152 = 3.0;
double r69153 = pow(r69151, r69152);
double r69154 = sin(r69148);
double r69155 = r69154 * r69151;
double r69156 = r69149 * r69146;
double r69157 = cos(r69143);
double r69158 = r69156 * r69157;
double r69159 = r69155 + r69158;
double r69160 = asin(r69159);
double r69161 = sin(r69160);
double r69162 = r69154 * r69161;
double r69163 = pow(r69162, r69152);
double r69164 = log1p(r69163);
double r69165 = expm1(r69164);
double r69166 = r69153 - r69165;
double r69167 = fma(r69154, r69161, r69151);
double r69168 = r69161 * r69167;
double r69169 = r69154 * r69168;
double r69170 = fma(r69151, r69151, r69169);
double r69171 = r69166 / r69170;
double r69172 = atan2(r69150, r69171);
double r69173 = r69142 + r69172;
return r69173;
}



Bits error versus lambda1



Bits error versus phi1



Bits error versus phi2



Bits error versus delta



Bits error versus theta
Initial program 0.2
rmApplied flip3--0.2
Simplified0.2
rmApplied expm1-log1p-u0.2
Final simplification0.2
herbie shell --seed 2020033 +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))))))))))