Average Error: 0.2 → 0.2
Time: 42.8s
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{\sin theta \cdot \left(\sin delta \cdot \cos \phi_1\right)}{\mathsf{expm1}\left(\mathsf{log1p}\left(\cos delta - \sin \phi_1 \cdot \mathsf{fma}\left(\sin \phi_1, \cos delta, \left(\sin delta \cdot \cos \phi_1\right) \cdot \cos theta\right)\right)\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{\sin theta \cdot \left(\sin delta \cdot \cos \phi_1\right)}{\mathsf{expm1}\left(\mathsf{log1p}\left(\cos delta - \sin \phi_1 \cdot \mathsf{fma}\left(\sin \phi_1, \cos delta, \left(\sin delta \cdot \cos \phi_1\right) \cdot \cos theta\right)\right)\right)} + \lambda_1
double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r856507 = lambda1;
        double r856508 = theta;
        double r856509 = sin(r856508);
        double r856510 = delta;
        double r856511 = sin(r856510);
        double r856512 = r856509 * r856511;
        double r856513 = phi1;
        double r856514 = cos(r856513);
        double r856515 = r856512 * r856514;
        double r856516 = cos(r856510);
        double r856517 = sin(r856513);
        double r856518 = r856517 * r856516;
        double r856519 = r856514 * r856511;
        double r856520 = cos(r856508);
        double r856521 = r856519 * r856520;
        double r856522 = r856518 + r856521;
        double r856523 = asin(r856522);
        double r856524 = sin(r856523);
        double r856525 = r856517 * r856524;
        double r856526 = r856516 - r856525;
        double r856527 = atan2(r856515, r856526);
        double r856528 = r856507 + r856527;
        return r856528;
}

double f(double lambda1, double phi1, double __attribute__((unused)) phi2, double delta, double theta) {
        double r856529 = theta;
        double r856530 = sin(r856529);
        double r856531 = delta;
        double r856532 = sin(r856531);
        double r856533 = phi1;
        double r856534 = cos(r856533);
        double r856535 = r856532 * r856534;
        double r856536 = r856530 * r856535;
        double r856537 = cos(r856531);
        double r856538 = sin(r856533);
        double r856539 = cos(r856529);
        double r856540 = r856535 * r856539;
        double r856541 = fma(r856538, r856537, r856540);
        double r856542 = r856538 * r856541;
        double r856543 = r856537 - r856542;
        double r856544 = log1p(r856543);
        double r856545 = expm1(r856544);
        double r856546 = atan2(r856536, r856545);
        double r856547 = lambda1;
        double r856548 = r856546 + r856547;
        return r856548;
}

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 associate-*r*0.2

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

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

    \[\leadsto \tan^{-1}_* \frac{\left(\cos \phi_1 \cdot \sin delta\right) \cdot \sin theta}{\color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\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)\right)\right)}} + \lambda_1\]
  8. Taylor expanded around inf 0.2

    \[\leadsto \tan^{-1}_* \frac{\left(\cos \phi_1 \cdot \sin delta\right) \cdot \sin theta}{\mathsf{expm1}\left(\mathsf{log1p}\left(\color{blue}{\cos delta - \left({\left(\sin \phi_1\right)}^{2} \cdot \cos delta + \sin delta \cdot \left(\sin \phi_1 \cdot \left(\cos theta \cdot \cos \phi_1\right)\right)\right)}\right)\right)} + \lambda_1\]
  9. Simplified0.2

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

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

Reproduce

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