Average Error: 39.6 → 3.9
Time: 15.9s
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)}\]
\[\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\]
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)}
\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
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r59597 = R;
        double r59598 = lambda1;
        double r59599 = lambda2;
        double r59600 = r59598 - r59599;
        double r59601 = phi1;
        double r59602 = phi2;
        double r59603 = r59601 + r59602;
        double r59604 = 2.0;
        double r59605 = r59603 / r59604;
        double r59606 = cos(r59605);
        double r59607 = r59600 * r59606;
        double r59608 = r59607 * r59607;
        double r59609 = r59601 - r59602;
        double r59610 = r59609 * r59609;
        double r59611 = r59608 + r59610;
        double r59612 = sqrt(r59611);
        double r59613 = r59597 * r59612;
        return r59613;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r59614 = lambda1;
        double r59615 = lambda2;
        double r59616 = r59614 - r59615;
        double r59617 = phi1;
        double r59618 = phi2;
        double r59619 = r59617 + r59618;
        double r59620 = 2.0;
        double r59621 = r59619 / r59620;
        double r59622 = cos(r59621);
        double r59623 = r59616 * r59622;
        double r59624 = r59617 - r59618;
        double r59625 = hypot(r59623, r59624);
        double r59626 = R;
        double r59627 = r59625 * r59626;
        return r59627;
}

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 39.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.9

    \[\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 pow13.9

    \[\leadsto \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 \color{blue}{{R}^{1}}\]
  5. Applied pow13.9

    \[\leadsto \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)\right)}^{1}} \cdot {R}^{1}\]
  6. Applied pow-prod-down3.9

    \[\leadsto \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)}^{1}}\]
  7. Final simplification3.9

    \[\leadsto \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\]

Reproduce

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