Average Error: 38.6 → 3.7
Time: 7.3s
Precision: 64
\[R \cdot \sqrt{\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\]
\[\sqrt{1} \cdot \left(\mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right), \phi_1 - \phi_2\right) \cdot R\right)\]
R \cdot \sqrt{\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}
\sqrt{1} \cdot \left(\mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right), \phi_1 - \phi_2\right) \cdot R\right)
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r88552 = R;
        double r88553 = lambda1;
        double r88554 = lambda2;
        double r88555 = r88553 - r88554;
        double r88556 = phi1;
        double r88557 = phi2;
        double r88558 = r88556 + r88557;
        double r88559 = 2.0;
        double r88560 = r88558 / r88559;
        double r88561 = cos(r88560);
        double r88562 = r88555 * r88561;
        double r88563 = r88562 * r88562;
        double r88564 = r88556 - r88557;
        double r88565 = r88564 * r88564;
        double r88566 = r88563 + r88565;
        double r88567 = sqrt(r88566);
        double r88568 = r88552 * r88567;
        return r88568;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r88569 = 1.0;
        double r88570 = sqrt(r88569);
        double r88571 = lambda1;
        double r88572 = lambda2;
        double r88573 = r88571 - r88572;
        double r88574 = phi1;
        double r88575 = phi2;
        double r88576 = r88574 + r88575;
        double r88577 = 2.0;
        double r88578 = r88576 / r88577;
        double r88579 = cos(r88578);
        double r88580 = r88573 * r88579;
        double r88581 = r88574 - r88575;
        double r88582 = hypot(r88580, r88581);
        double r88583 = R;
        double r88584 = r88582 * r88583;
        double r88585 = r88570 * r88584;
        return r88585;
}

Error

Bits error versus R

Bits error versus lambda1

Bits error versus lambda2

Bits error versus phi1

Bits error versus phi2

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Initial program 38.6

    \[R \cdot \sqrt{\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\]
  2. Simplified3.7

    \[\leadsto \color{blue}{\mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right), \phi_1 - \phi_2\right) \cdot R}\]
  3. Using strategy rm
  4. Applied add-sqr-sqrt4.1

    \[\leadsto \color{blue}{\left(\sqrt{\mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right), \phi_1 - \phi_2\right)} \cdot \sqrt{\mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right), \phi_1 - \phi_2\right)}\right)} \cdot R\]
  5. Applied associate-*l*4.2

    \[\leadsto \color{blue}{\sqrt{\mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right), \phi_1 - \phi_2\right)} \cdot \left(\sqrt{\mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right), \phi_1 - \phi_2\right)} \cdot R\right)}\]
  6. Using strategy rm
  7. Applied add-log-exp4.2

    \[\leadsto \sqrt{\mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \color{blue}{\log \left(e^{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\right)}, \phi_1 - \phi_2\right)} \cdot \left(\sqrt{\mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right), \phi_1 - \phi_2\right)} \cdot R\right)\]
  8. Using strategy rm
  9. Applied *-un-lft-identity4.2

    \[\leadsto \sqrt{\color{blue}{1 \cdot \mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \log \left(e^{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\right), \phi_1 - \phi_2\right)}} \cdot \left(\sqrt{\mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right), \phi_1 - \phi_2\right)} \cdot R\right)\]
  10. Applied sqrt-prod4.2

    \[\leadsto \color{blue}{\left(\sqrt{1} \cdot \sqrt{\mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \log \left(e^{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\right), \phi_1 - \phi_2\right)}\right)} \cdot \left(\sqrt{\mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right), \phi_1 - \phi_2\right)} \cdot R\right)\]
  11. Applied associate-*l*4.2

    \[\leadsto \color{blue}{\sqrt{1} \cdot \left(\sqrt{\mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \log \left(e^{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\right), \phi_1 - \phi_2\right)} \cdot \left(\sqrt{\mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right), \phi_1 - \phi_2\right)} \cdot R\right)\right)}\]
  12. Simplified3.7

    \[\leadsto \sqrt{1} \cdot \color{blue}{\left(\mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right), \phi_1 - \phi_2\right) \cdot R\right)}\]
  13. Final simplification3.7

    \[\leadsto \sqrt{1} \cdot \left(\mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right), \phi_1 - \phi_2\right) \cdot R\right)\]

Reproduce

herbie shell --seed 2020059 +o rules:numerics
(FPCore (R lambda1 lambda2 phi1 phi2)
  :name "Equirectangular approximation to distance on a great circle"
  :precision binary64
  (* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))))