Average Error: 37.1 → 4.1
Time: 45.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(\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 r16543428 = R;
        double r16543429 = lambda1;
        double r16543430 = lambda2;
        double r16543431 = r16543429 - r16543430;
        double r16543432 = phi1;
        double r16543433 = phi2;
        double r16543434 = r16543432 + r16543433;
        double r16543435 = 2.0;
        double r16543436 = r16543434 / r16543435;
        double r16543437 = cos(r16543436);
        double r16543438 = r16543431 * r16543437;
        double r16543439 = r16543438 * r16543438;
        double r16543440 = r16543432 - r16543433;
        double r16543441 = r16543440 * r16543440;
        double r16543442 = r16543439 + r16543441;
        double r16543443 = sqrt(r16543442);
        double r16543444 = r16543428 * r16543443;
        return r16543444;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r16543445 = lambda1;
        double r16543446 = lambda2;
        double r16543447 = r16543445 - r16543446;
        double r16543448 = phi1;
        double r16543449 = phi2;
        double r16543450 = r16543448 + r16543449;
        double r16543451 = 0.5;
        double r16543452 = r16543450 * r16543451;
        double r16543453 = cos(r16543452);
        double r16543454 = r16543447 * r16543453;
        double r16543455 = r16543448 - r16543449;
        double r16543456 = hypot(r16543454, r16543455);
        double r16543457 = R;
        double r16543458 = r16543456 * r16543457;
        return r16543458;
}

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

    \[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. Simplified4.1

    \[\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 4.1

    \[\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. Simplified4.1

    \[\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 simplification4.1

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