Average Error: 37.3 → 3.6
Time: 28.7s
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 \mathsf{expm1}\left(\mathsf{log1p}\left(\log \left(e^{\cos \left(\frac{\phi_2 + \phi_1}{2}\right)}\right)\right)\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 \mathsf{expm1}\left(\mathsf{log1p}\left(\log \left(e^{\cos \left(\frac{\phi_2 + \phi_1}{2}\right)}\right)\right)\right), \phi_1 - \phi_2\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r2297364 = R;
        double r2297365 = lambda1;
        double r2297366 = lambda2;
        double r2297367 = r2297365 - r2297366;
        double r2297368 = phi1;
        double r2297369 = phi2;
        double r2297370 = r2297368 + r2297369;
        double r2297371 = 2.0;
        double r2297372 = r2297370 / r2297371;
        double r2297373 = cos(r2297372);
        double r2297374 = r2297367 * r2297373;
        double r2297375 = r2297374 * r2297374;
        double r2297376 = r2297368 - r2297369;
        double r2297377 = r2297376 * r2297376;
        double r2297378 = r2297375 + r2297377;
        double r2297379 = sqrt(r2297378);
        double r2297380 = r2297364 * r2297379;
        return r2297380;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r2297381 = lambda1;
        double r2297382 = lambda2;
        double r2297383 = r2297381 - r2297382;
        double r2297384 = phi2;
        double r2297385 = phi1;
        double r2297386 = r2297384 + r2297385;
        double r2297387 = 2.0;
        double r2297388 = r2297386 / r2297387;
        double r2297389 = cos(r2297388);
        double r2297390 = exp(r2297389);
        double r2297391 = log(r2297390);
        double r2297392 = log1p(r2297391);
        double r2297393 = expm1(r2297392);
        double r2297394 = r2297383 * r2297393;
        double r2297395 = r2297385 - r2297384;
        double r2297396 = hypot(r2297394, r2297395);
        double r2297397 = R;
        double r2297398 = r2297396 * r2297397;
        return r2297398;
}

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

    \[\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 expm1-log1p-u3.5

    \[\leadsto \mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\cos \left(\frac{\phi_2 + \phi_1}{2}\right)\right)\right)}, \phi_1 - \phi_2\right) \cdot R\]
  5. Using strategy rm
  6. Applied add-log-exp3.6

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

    \[\leadsto \mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \mathsf{expm1}\left(\mathsf{log1p}\left(\log \left(e^{\cos \left(\frac{\phi_2 + \phi_1}{2}\right)}\right)\right)\right), \phi_1 - \phi_2\right) \cdot R\]

Reproduce

herbie shell --seed 2019134 +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))))))