Average Error: 36.9 → 3.6
Time: 28.6s
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 r3343052 = R;
        double r3343053 = lambda1;
        double r3343054 = lambda2;
        double r3343055 = r3343053 - r3343054;
        double r3343056 = phi1;
        double r3343057 = phi2;
        double r3343058 = r3343056 + r3343057;
        double r3343059 = 2.0;
        double r3343060 = r3343058 / r3343059;
        double r3343061 = cos(r3343060);
        double r3343062 = r3343055 * r3343061;
        double r3343063 = r3343062 * r3343062;
        double r3343064 = r3343056 - r3343057;
        double r3343065 = r3343064 * r3343064;
        double r3343066 = r3343063 + r3343065;
        double r3343067 = sqrt(r3343066);
        double r3343068 = r3343052 * r3343067;
        return r3343068;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r3343069 = lambda1;
        double r3343070 = lambda2;
        double r3343071 = r3343069 - r3343070;
        double r3343072 = phi1;
        double r3343073 = phi2;
        double r3343074 = r3343072 + r3343073;
        double r3343075 = 2.0;
        double r3343076 = r3343074 / r3343075;
        double r3343077 = cos(r3343076);
        double r3343078 = r3343071 * r3343077;
        double r3343079 = r3343072 - r3343073;
        double r3343080 = hypot(r3343078, r3343079);
        double r3343081 = R;
        double r3343082 = r3343080 * r3343081;
        return r3343082;
}

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 36.9

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

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

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

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

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

    \[\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 2019164 +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))))))