Average Error: 0.2 → 0.2
Time: 50.9s
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 - \mathsf{expm1}\left(\mathsf{log1p}\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) \cdot \mathsf{expm1}\left(\mathsf{log1p}\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)}{\mathsf{expm1}\left(\mathsf{log1p}\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) + \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 - \mathsf{expm1}\left(\mathsf{log1p}\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) \cdot \mathsf{expm1}\left(\mathsf{log1p}\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)}{\mathsf{expm1}\left(\mathsf{log1p}\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) + \cos delta}}
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r1490655 = lambda1;
        double r1490656 = theta;
        double r1490657 = sin(r1490656);
        double r1490658 = delta;
        double r1490659 = sin(r1490658);
        double r1490660 = r1490657 * r1490659;
        double r1490661 = phi1;
        double r1490662 = cos(r1490661);
        double r1490663 = r1490660 * r1490662;
        double r1490664 = cos(r1490658);
        double r1490665 = sin(r1490661);
        double r1490666 = r1490665 * r1490664;
        double r1490667 = r1490662 * r1490659;
        double r1490668 = cos(r1490656);
        double r1490669 = r1490667 * r1490668;
        double r1490670 = r1490666 + r1490669;
        double r1490671 = asin(r1490670);
        double r1490672 = sin(r1490671);
        double r1490673 = r1490665 * r1490672;
        double r1490674 = r1490664 - r1490673;
        double r1490675 = atan2(r1490663, r1490674);
        double r1490676 = r1490655 + r1490675;
        return r1490676;
}

double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r1490677 = lambda1;
        double r1490678 = phi1;
        double r1490679 = cos(r1490678);
        double r1490680 = theta;
        double r1490681 = sin(r1490680);
        double r1490682 = r1490679 * r1490681;
        double r1490683 = delta;
        double r1490684 = sin(r1490683);
        double r1490685 = r1490682 * r1490684;
        double r1490686 = cos(r1490683);
        double r1490687 = r1490686 * r1490686;
        double r1490688 = cos(r1490680);
        double r1490689 = r1490679 * r1490684;
        double r1490690 = sin(r1490678);
        double r1490691 = r1490686 * r1490690;
        double r1490692 = fma(r1490688, r1490689, r1490691);
        double r1490693 = asin(r1490692);
        double r1490694 = sin(r1490693);
        double r1490695 = r1490694 * r1490690;
        double r1490696 = log1p(r1490695);
        double r1490697 = expm1(r1490696);
        double r1490698 = r1490697 * r1490697;
        double r1490699 = r1490687 - r1490698;
        double r1490700 = r1490697 + r1490686;
        double r1490701 = r1490699 / r1490700;
        double r1490702 = atan2(r1490685, r1490701);
        double r1490703 = r1490677 + r1490702;
        return r1490703;
}

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 expm1-log1p-u0.2

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

Reproduce

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