Average Error: 37.1 → 3.4
Time: 29.1s
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 r3453904 = R;
        double r3453905 = lambda1;
        double r3453906 = lambda2;
        double r3453907 = r3453905 - r3453906;
        double r3453908 = phi1;
        double r3453909 = phi2;
        double r3453910 = r3453908 + r3453909;
        double r3453911 = 2.0;
        double r3453912 = r3453910 / r3453911;
        double r3453913 = cos(r3453912);
        double r3453914 = r3453907 * r3453913;
        double r3453915 = r3453914 * r3453914;
        double r3453916 = r3453908 - r3453909;
        double r3453917 = r3453916 * r3453916;
        double r3453918 = r3453915 + r3453917;
        double r3453919 = sqrt(r3453918);
        double r3453920 = r3453904 * r3453919;
        return r3453920;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r3453921 = lambda1;
        double r3453922 = lambda2;
        double r3453923 = r3453921 - r3453922;
        double r3453924 = phi1;
        double r3453925 = phi2;
        double r3453926 = r3453924 + r3453925;
        double r3453927 = 2.0;
        double r3453928 = r3453926 / r3453927;
        double r3453929 = cos(r3453928);
        double r3453930 = r3453923 * r3453929;
        double r3453931 = r3453924 - r3453925;
        double r3453932 = hypot(r3453930, r3453931);
        double r3453933 = R;
        double r3453934 = r3453932 * r3453933;
        return r3453934;
}

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 37.1

    \[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.4

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

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

    \[\leadsto \color{blue}{\left(\mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_2 + \phi_1}{2}\right), \phi_1 - \phi_2\right) \cdot 1\right) \cdot R}\]
  6. Simplified3.4

    \[\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\]
  7. Final simplification3.4

    \[\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 2019158 +o rules:numerics
(FPCore (R lambda1 lambda2 phi1 phi2)
  :name "Equirectangular approximation to distance on a great circle"
  (* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))))