Average Error: 37.4 → 4.0
Time: 26.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 r3326398 = R;
        double r3326399 = lambda1;
        double r3326400 = lambda2;
        double r3326401 = r3326399 - r3326400;
        double r3326402 = phi1;
        double r3326403 = phi2;
        double r3326404 = r3326402 + r3326403;
        double r3326405 = 2.0;
        double r3326406 = r3326404 / r3326405;
        double r3326407 = cos(r3326406);
        double r3326408 = r3326401 * r3326407;
        double r3326409 = r3326408 * r3326408;
        double r3326410 = r3326402 - r3326403;
        double r3326411 = r3326410 * r3326410;
        double r3326412 = r3326409 + r3326411;
        double r3326413 = sqrt(r3326412);
        double r3326414 = r3326398 * r3326413;
        return r3326414;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r3326415 = lambda1;
        double r3326416 = lambda2;
        double r3326417 = r3326415 - r3326416;
        double r3326418 = phi1;
        double r3326419 = phi2;
        double r3326420 = r3326418 + r3326419;
        double r3326421 = 2.0;
        double r3326422 = r3326420 / r3326421;
        double r3326423 = cos(r3326422);
        double r3326424 = r3326417 * r3326423;
        double r3326425 = r3326418 - r3326419;
        double r3326426 = hypot(r3326424, r3326425);
        double r3326427 = R;
        double r3326428 = r3326426 * r3326427;
        return r3326428;
}

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. Simplified4.0

    \[\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-identity4.0

    \[\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*4.0

    \[\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. Simplified4.0

    \[\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 simplification4.0

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