Average Error: 37.4 → 3.8
Time: 26.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 r3043284 = R;
        double r3043285 = lambda1;
        double r3043286 = lambda2;
        double r3043287 = r3043285 - r3043286;
        double r3043288 = phi1;
        double r3043289 = phi2;
        double r3043290 = r3043288 + r3043289;
        double r3043291 = 2.0;
        double r3043292 = r3043290 / r3043291;
        double r3043293 = cos(r3043292);
        double r3043294 = r3043287 * r3043293;
        double r3043295 = r3043294 * r3043294;
        double r3043296 = r3043288 - r3043289;
        double r3043297 = r3043296 * r3043296;
        double r3043298 = r3043295 + r3043297;
        double r3043299 = sqrt(r3043298);
        double r3043300 = r3043284 * r3043299;
        return r3043300;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r3043301 = lambda1;
        double r3043302 = lambda2;
        double r3043303 = r3043301 - r3043302;
        double r3043304 = phi1;
        double r3043305 = phi2;
        double r3043306 = r3043304 + r3043305;
        double r3043307 = 2.0;
        double r3043308 = r3043306 / r3043307;
        double r3043309 = cos(r3043308);
        double r3043310 = r3043303 * r3043309;
        double r3043311 = r3043304 - r3043305;
        double r3043312 = hypot(r3043310, r3043311);
        double r3043313 = R;
        double r3043314 = r3043312 * r3043313;
        return r3043314;
}

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

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

    \[\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 *-commutative3.8

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

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