Average Error: 0.2 → 0.2
Time: 52.2s
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)}\]
\[\tan^{-1}_* \frac{\left(\cos \phi_1 \cdot \sin theta\right) \cdot \sin delta}{\mathsf{fma}\left(1, \cos delta, \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)\right) \cdot \sin \phi_1\right) + \mathsf{fma}\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), \sin \phi_1, \sin \left(\frac{\pi}{2} - \cos^{-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)} + \lambda_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)}
\tan^{-1}_* \frac{\left(\cos \phi_1 \cdot \sin theta\right) \cdot \sin delta}{\mathsf{fma}\left(1, \cos delta, \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)\right) \cdot \sin \phi_1\right) + \mathsf{fma}\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), \sin \phi_1, \sin \left(\frac{\pi}{2} - \cos^{-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)} + \lambda_1
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r4125539 = lambda1;
        double r4125540 = theta;
        double r4125541 = sin(r4125540);
        double r4125542 = delta;
        double r4125543 = sin(r4125542);
        double r4125544 = r4125541 * r4125543;
        double r4125545 = phi1;
        double r4125546 = cos(r4125545);
        double r4125547 = r4125544 * r4125546;
        double r4125548 = cos(r4125542);
        double r4125549 = sin(r4125545);
        double r4125550 = r4125549 * r4125548;
        double r4125551 = r4125546 * r4125543;
        double r4125552 = cos(r4125540);
        double r4125553 = r4125551 * r4125552;
        double r4125554 = r4125550 + r4125553;
        double r4125555 = asin(r4125554);
        double r4125556 = sin(r4125555);
        double r4125557 = r4125549 * r4125556;
        double r4125558 = r4125548 - r4125557;
        double r4125559 = atan2(r4125547, r4125558);
        double r4125560 = r4125539 + r4125559;
        return r4125560;
}

double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r4125561 = phi1;
        double r4125562 = cos(r4125561);
        double r4125563 = theta;
        double r4125564 = sin(r4125563);
        double r4125565 = r4125562 * r4125564;
        double r4125566 = delta;
        double r4125567 = sin(r4125566);
        double r4125568 = r4125565 * r4125567;
        double r4125569 = 1.0;
        double r4125570 = cos(r4125566);
        double r4125571 = cos(r4125563);
        double r4125572 = r4125562 * r4125567;
        double r4125573 = sin(r4125561);
        double r4125574 = r4125570 * r4125573;
        double r4125575 = fma(r4125571, r4125572, r4125574);
        double r4125576 = asin(r4125575);
        double r4125577 = sin(r4125576);
        double r4125578 = -r4125577;
        double r4125579 = r4125578 * r4125573;
        double r4125580 = fma(r4125569, r4125570, r4125579);
        double r4125581 = atan2(1.0, 0.0);
        double r4125582 = 2.0;
        double r4125583 = r4125581 / r4125582;
        double r4125584 = acos(r4125575);
        double r4125585 = r4125583 - r4125584;
        double r4125586 = sin(r4125585);
        double r4125587 = r4125586 * r4125573;
        double r4125588 = fma(r4125578, r4125573, r4125587);
        double r4125589 = r4125580 + r4125588;
        double r4125590 = atan2(r4125568, r4125589);
        double r4125591 = lambda1;
        double r4125592 = r4125590 + r4125591;
        return r4125592;
}

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 *-un-lft-identity0.2

    \[\leadsto \tan^{-1}_* \frac{\sin delta \cdot \left(\cos \phi_1 \cdot \sin theta\right)}{\color{blue}{1 \cdot \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. Applied prod-diff0.2

    \[\leadsto \tan^{-1}_* \frac{\sin delta \cdot \left(\cos \phi_1 \cdot \sin theta\right)}{\color{blue}{\mathsf{fma}\left(1, \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 \sin \phi_1\right) + \mathsf{fma}\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), \sin \phi_1, \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)}} + \lambda_1\]
  6. Using strategy rm
  7. Applied asin-acos0.2

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

    \[\leadsto \tan^{-1}_* \frac{\left(\cos \phi_1 \cdot \sin theta\right) \cdot \sin delta}{\mathsf{fma}\left(1, \cos delta, \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)\right) \cdot \sin \phi_1\right) + \mathsf{fma}\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), \sin \phi_1, \sin \left(\frac{\pi}{2} - \cos^{-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)} + \lambda_1\]

Reproduce

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