Average Error: 37.3 → 3.7
Time: 30.5s
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(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\left(\phi_1 + \phi_2\right) \cdot \frac{1}{2}\right)\right), \left(\phi_1 - \phi_2\right)\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(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\left(\phi_1 + \phi_2\right) \cdot \frac{1}{2}\right)\right), \left(\phi_1 - \phi_2\right)\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r5391302 = R;
        double r5391303 = lambda1;
        double r5391304 = lambda2;
        double r5391305 = r5391303 - r5391304;
        double r5391306 = phi1;
        double r5391307 = phi2;
        double r5391308 = r5391306 + r5391307;
        double r5391309 = 2.0;
        double r5391310 = r5391308 / r5391309;
        double r5391311 = cos(r5391310);
        double r5391312 = r5391305 * r5391311;
        double r5391313 = r5391312 * r5391312;
        double r5391314 = r5391306 - r5391307;
        double r5391315 = r5391314 * r5391314;
        double r5391316 = r5391313 + r5391315;
        double r5391317 = sqrt(r5391316);
        double r5391318 = r5391302 * r5391317;
        return r5391318;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r5391319 = lambda1;
        double r5391320 = lambda2;
        double r5391321 = r5391319 - r5391320;
        double r5391322 = phi1;
        double r5391323 = phi2;
        double r5391324 = r5391322 + r5391323;
        double r5391325 = 0.5;
        double r5391326 = r5391324 * r5391325;
        double r5391327 = cos(r5391326);
        double r5391328 = r5391321 * r5391327;
        double r5391329 = r5391322 - r5391323;
        double r5391330 = hypot(r5391328, r5391329);
        double r5391331 = R;
        double r5391332 = r5391330 * r5391331;
        return r5391332;
}

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

    \[\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. Taylor expanded around -inf 3.7

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

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

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

Reproduce

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