Average Error: 0.2 → 0.2
Time: 33.4s
Precision: 64
\[\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}\]
\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;
}

Error

Bits error versus lambda1

Bits error versus phi1

Bits error versus phi2

Bits error versus delta

Bits error versus theta

Derivation

  1. Initial program 0.2

    \[\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)}\]
  2. Simplified0.2

    \[\leadsto \color{blue}{\lambda_1 + \tan^{-1}_* \frac{\left(\sin theta \cdot \sin delta\right) \cdot \cos \phi_1}{\cos delta - \sin \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) \cdot \sin \phi_1}}\]
  3. Using strategy rm
  4. Applied log1p-expm1-u0.2

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\left(\sin theta \cdot \sin delta\right) \cdot \cos \phi_1}{\cos delta - \sin \color{blue}{\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}\]
  5. Final simplification0.2

    \[\leadsto \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}\]

Reproduce

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))))))))))