Average Error: 0.2 → 0.2
Time: 1.0m
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(\cos \phi_1 \cdot \sin theta\right) \cdot \sin delta}{\frac{\cos delta \cdot \cos delta - \sin \left(\sin^{-1} \left(\mathsf{fma}\left(\cos theta, \cos \phi_1 \cdot \sin delta, \cos delta \cdot \sin \phi_1\right)\right)\right) \cdot \left(\sin \phi_1 \cdot \left(\sin \left(\sin^{-1} \left(\mathsf{fma}\left(\cos theta, \cos \phi_1 \cdot \sin delta, \cos delta \cdot \sin \phi_1\right)\right)\right) \cdot \sin \phi_1\right)\right)}{\sin \left(\sin^{-1} \left(\mathsf{fma}\left(\cos theta, \cos \phi_1 \cdot \sin delta, \cos delta \cdot \sin \phi_1\right)\right)\right) \cdot \sin \phi_1 + \cos delta}}\]
\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(\cos \phi_1 \cdot \sin theta\right) \cdot \sin delta}{\frac{\cos delta \cdot \cos delta - \sin \left(\sin^{-1} \left(\mathsf{fma}\left(\cos theta, \cos \phi_1 \cdot \sin delta, \cos delta \cdot \sin \phi_1\right)\right)\right) \cdot \left(\sin \phi_1 \cdot \left(\sin \left(\sin^{-1} \left(\mathsf{fma}\left(\cos theta, \cos \phi_1 \cdot \sin delta, \cos delta \cdot \sin \phi_1\right)\right)\right) \cdot \sin \phi_1\right)\right)}{\sin \left(\sin^{-1} \left(\mathsf{fma}\left(\cos theta, \cos \phi_1 \cdot \sin delta, \cos delta \cdot \sin \phi_1\right)\right)\right) \cdot \sin \phi_1 + \cos delta}}
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r3884322 = lambda1;
        double r3884323 = theta;
        double r3884324 = sin(r3884323);
        double r3884325 = delta;
        double r3884326 = sin(r3884325);
        double r3884327 = r3884324 * r3884326;
        double r3884328 = phi1;
        double r3884329 = cos(r3884328);
        double r3884330 = r3884327 * r3884329;
        double r3884331 = cos(r3884325);
        double r3884332 = sin(r3884328);
        double r3884333 = r3884332 * r3884331;
        double r3884334 = r3884329 * r3884326;
        double r3884335 = cos(r3884323);
        double r3884336 = r3884334 * r3884335;
        double r3884337 = r3884333 + r3884336;
        double r3884338 = asin(r3884337);
        double r3884339 = sin(r3884338);
        double r3884340 = r3884332 * r3884339;
        double r3884341 = r3884331 - r3884340;
        double r3884342 = atan2(r3884330, r3884341);
        double r3884343 = r3884322 + r3884342;
        return r3884343;
}

double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r3884344 = lambda1;
        double r3884345 = phi1;
        double r3884346 = cos(r3884345);
        double r3884347 = theta;
        double r3884348 = sin(r3884347);
        double r3884349 = r3884346 * r3884348;
        double r3884350 = delta;
        double r3884351 = sin(r3884350);
        double r3884352 = r3884349 * r3884351;
        double r3884353 = cos(r3884350);
        double r3884354 = r3884353 * r3884353;
        double r3884355 = cos(r3884347);
        double r3884356 = r3884346 * r3884351;
        double r3884357 = sin(r3884345);
        double r3884358 = r3884353 * r3884357;
        double r3884359 = fma(r3884355, r3884356, r3884358);
        double r3884360 = asin(r3884359);
        double r3884361 = sin(r3884360);
        double r3884362 = r3884361 * r3884357;
        double r3884363 = r3884357 * r3884362;
        double r3884364 = r3884361 * r3884363;
        double r3884365 = r3884354 - r3884364;
        double r3884366 = r3884362 + r3884353;
        double r3884367 = r3884365 / r3884366;
        double r3884368 = atan2(r3884352, r3884367);
        double r3884369 = r3884344 + r3884368;
        return r3884369;
}

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}{\tan^{-1}_* \frac{\sin delta \cdot \left(\cos \phi_1 \cdot \sin theta\right)}{\cos delta - \sin \phi_1 \cdot \sin \left(\sin^{-1} \left(\mathsf{fma}\left(\cos theta, \cos \phi_1 \cdot \sin delta, \cos delta \cdot \sin \phi_1\right)\right)\right)} + \lambda_1}\]
  3. Using strategy rm
  4. Applied flip--0.2

    \[\leadsto \tan^{-1}_* \frac{\sin delta \cdot \left(\cos \phi_1 \cdot \sin theta\right)}{\color{blue}{\frac{\cos delta \cdot \cos delta - \left(\sin \phi_1 \cdot \sin \left(\sin^{-1} \left(\mathsf{fma}\left(\cos theta, \cos \phi_1 \cdot \sin delta, \cos delta \cdot \sin \phi_1\right)\right)\right)\right) \cdot \left(\sin \phi_1 \cdot \sin \left(\sin^{-1} \left(\mathsf{fma}\left(\cos theta, \cos \phi_1 \cdot \sin delta, \cos delta \cdot \sin \phi_1\right)\right)\right)\right)}{\cos delta + \sin \phi_1 \cdot \sin \left(\sin^{-1} \left(\mathsf{fma}\left(\cos theta, \cos \phi_1 \cdot \sin delta, \cos delta \cdot \sin \phi_1\right)\right)\right)}}} + \lambda_1\]
  5. Using strategy rm
  6. Applied associate-*r*0.2

    \[\leadsto \tan^{-1}_* \frac{\sin delta \cdot \left(\cos \phi_1 \cdot \sin theta\right)}{\frac{\cos delta \cdot \cos delta - \color{blue}{\left(\left(\sin \phi_1 \cdot \sin \left(\sin^{-1} \left(\mathsf{fma}\left(\cos theta, \cos \phi_1 \cdot \sin delta, \cos delta \cdot \sin \phi_1\right)\right)\right)\right) \cdot \sin \phi_1\right) \cdot \sin \left(\sin^{-1} \left(\mathsf{fma}\left(\cos theta, \cos \phi_1 \cdot \sin delta, \cos delta \cdot \sin \phi_1\right)\right)\right)}}{\cos delta + \sin \phi_1 \cdot \sin \left(\sin^{-1} \left(\mathsf{fma}\left(\cos theta, \cos \phi_1 \cdot \sin delta, \cos delta \cdot \sin \phi_1\right)\right)\right)}} + \lambda_1\]
  7. Final simplification0.2

    \[\leadsto \lambda_1 + \tan^{-1}_* \frac{\left(\cos \phi_1 \cdot \sin theta\right) \cdot \sin delta}{\frac{\cos delta \cdot \cos delta - \sin \left(\sin^{-1} \left(\mathsf{fma}\left(\cos theta, \cos \phi_1 \cdot \sin delta, \cos delta \cdot \sin \phi_1\right)\right)\right) \cdot \left(\sin \phi_1 \cdot \left(\sin \left(\sin^{-1} \left(\mathsf{fma}\left(\cos theta, \cos \phi_1 \cdot \sin delta, \cos delta \cdot \sin \phi_1\right)\right)\right) \cdot \sin \phi_1\right)\right)}{\sin \left(\sin^{-1} \left(\mathsf{fma}\left(\cos theta, \cos \phi_1 \cdot \sin delta, \cos delta \cdot \sin \phi_1\right)\right)\right) \cdot \sin \phi_1 + \cos delta}}\]

Reproduce

herbie shell --seed 2019144 +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))))))))))