Average Error: 37.0 → 3.8
Time: 19.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)}\]
\[\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 r1339336 = R;
        double r1339337 = lambda1;
        double r1339338 = lambda2;
        double r1339339 = r1339337 - r1339338;
        double r1339340 = phi1;
        double r1339341 = phi2;
        double r1339342 = r1339340 + r1339341;
        double r1339343 = 2.0;
        double r1339344 = r1339342 / r1339343;
        double r1339345 = cos(r1339344);
        double r1339346 = r1339339 * r1339345;
        double r1339347 = r1339346 * r1339346;
        double r1339348 = r1339340 - r1339341;
        double r1339349 = r1339348 * r1339348;
        double r1339350 = r1339347 + r1339349;
        double r1339351 = sqrt(r1339350);
        double r1339352 = r1339336 * r1339351;
        return r1339352;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1339353 = lambda1;
        double r1339354 = lambda2;
        double r1339355 = r1339353 - r1339354;
        double r1339356 = phi2;
        double r1339357 = phi1;
        double r1339358 = r1339356 + r1339357;
        double r1339359 = 2.0;
        double r1339360 = r1339358 / r1339359;
        double r1339361 = cos(r1339360);
        double r1339362 = r1339355 * r1339361;
        double r1339363 = r1339357 - r1339356;
        double r1339364 = hypot(r1339362, r1339363);
        double r1339365 = R;
        double r1339366 = r1339364 * r1339365;
        return r1339366;
}

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

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