Average Error: 39.3 → 3.8
Time: 32.3s
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_2 + \phi_1}{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_2 + \phi_1}{2}\right), \phi_1 - \phi_2\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r3977351 = R;
        double r3977352 = lambda1;
        double r3977353 = lambda2;
        double r3977354 = r3977352 - r3977353;
        double r3977355 = phi1;
        double r3977356 = phi2;
        double r3977357 = r3977355 + r3977356;
        double r3977358 = 2.0;
        double r3977359 = r3977357 / r3977358;
        double r3977360 = cos(r3977359);
        double r3977361 = r3977354 * r3977360;
        double r3977362 = r3977361 * r3977361;
        double r3977363 = r3977355 - r3977356;
        double r3977364 = r3977363 * r3977363;
        double r3977365 = r3977362 + r3977364;
        double r3977366 = sqrt(r3977365);
        double r3977367 = r3977351 * r3977366;
        return r3977367;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r3977368 = lambda1;
        double r3977369 = lambda2;
        double r3977370 = r3977368 - r3977369;
        double r3977371 = phi2;
        double r3977372 = phi1;
        double r3977373 = r3977371 + r3977372;
        double r3977374 = 2.0;
        double r3977375 = r3977373 / r3977374;
        double r3977376 = cos(r3977375);
        double r3977377 = r3977370 * r3977376;
        double r3977378 = r3977372 - r3977371;
        double r3977379 = hypot(r3977377, r3977378);
        double r3977380 = R;
        double r3977381 = r3977379 * r3977380;
        return r3977381;
}

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

    \[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 *-un-lft-identity3.8

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

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

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

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

Reproduce

herbie shell --seed 2019169 +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.0))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0)))) (* (- phi1 phi2) (- phi1 phi2))))))