Average Error: 37.5 → 3.9
Time: 32.4s
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)}\]
\[R \cdot \mathsf{hypot}\left(\left(\left(\lambda_1 - \lambda_2\right) \cdot \mathsf{expm1}\left(\left(\mathsf{log1p}\left(\left(\cos \left(\left(\phi_1 + \phi_2\right) \cdot \frac{1}{2}\right)\right)\right)\right)\right)\right), \left(\phi_1 - \phi_2\right)\right)\]
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)}
R \cdot \mathsf{hypot}\left(\left(\left(\lambda_1 - \lambda_2\right) \cdot \mathsf{expm1}\left(\left(\mathsf{log1p}\left(\left(\cos \left(\left(\phi_1 + \phi_2\right) \cdot \frac{1}{2}\right)\right)\right)\right)\right)\right), \left(\phi_1 - \phi_2\right)\right)
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r4083340 = R;
        double r4083341 = lambda1;
        double r4083342 = lambda2;
        double r4083343 = r4083341 - r4083342;
        double r4083344 = phi1;
        double r4083345 = phi2;
        double r4083346 = r4083344 + r4083345;
        double r4083347 = 2.0;
        double r4083348 = r4083346 / r4083347;
        double r4083349 = cos(r4083348);
        double r4083350 = r4083343 * r4083349;
        double r4083351 = r4083350 * r4083350;
        double r4083352 = r4083344 - r4083345;
        double r4083353 = r4083352 * r4083352;
        double r4083354 = r4083351 + r4083353;
        double r4083355 = sqrt(r4083354);
        double r4083356 = r4083340 * r4083355;
        return r4083356;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r4083357 = R;
        double r4083358 = lambda1;
        double r4083359 = lambda2;
        double r4083360 = r4083358 - r4083359;
        double r4083361 = phi1;
        double r4083362 = phi2;
        double r4083363 = r4083361 + r4083362;
        double r4083364 = 0.5;
        double r4083365 = r4083363 * r4083364;
        double r4083366 = cos(r4083365);
        double r4083367 = log1p(r4083366);
        double r4083368 = expm1(r4083367);
        double r4083369 = r4083360 * r4083368;
        double r4083370 = r4083361 - r4083362;
        double r4083371 = hypot(r4083369, r4083370);
        double r4083372 = r4083357 * r4083371;
        return r4083372;
}

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

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

    \[\leadsto \color{blue}{\mathsf{hypot}\left(\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_2 + \phi_1}{2}\right)\right), \left(\phi_1 - \phi_2\right)\right) \cdot R}\]
  3. Using strategy rm
  4. Applied expm1-log1p-u3.9

    \[\leadsto \mathsf{hypot}\left(\left(\left(\lambda_1 - \lambda_2\right) \cdot \color{blue}{\mathsf{expm1}\left(\left(\mathsf{log1p}\left(\left(\cos \left(\frac{\phi_2 + \phi_1}{2}\right)\right)\right)\right)\right)}\right), \left(\phi_1 - \phi_2\right)\right) \cdot R\]
  5. Taylor expanded around -inf 4.0

    \[\leadsto \mathsf{hypot}\left(\left(\left(\lambda_1 - \lambda_2\right) \cdot \mathsf{expm1}\left(\color{blue}{\left(\log \left(\cos \left(\frac{1}{2} \cdot \left(\phi_1 + \phi_2\right)\right) + 1\right)\right)}\right)\right), \left(\phi_1 - \phi_2\right)\right) \cdot R\]
  6. Simplified3.9

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

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

Reproduce

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