Average Error: 39.1 → 3.8
Time: 18.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 \cos \left(\frac{\phi_1 + \phi_2}{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_1 + \phi_2}{2}\right), \phi_1 - \phi_2\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r68445 = R;
        double r68446 = lambda1;
        double r68447 = lambda2;
        double r68448 = r68446 - r68447;
        double r68449 = phi1;
        double r68450 = phi2;
        double r68451 = r68449 + r68450;
        double r68452 = 2.0;
        double r68453 = r68451 / r68452;
        double r68454 = cos(r68453);
        double r68455 = r68448 * r68454;
        double r68456 = r68455 * r68455;
        double r68457 = r68449 - r68450;
        double r68458 = r68457 * r68457;
        double r68459 = r68456 + r68458;
        double r68460 = sqrt(r68459);
        double r68461 = r68445 * r68460;
        return r68461;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r68462 = lambda1;
        double r68463 = lambda2;
        double r68464 = r68462 - r68463;
        double r68465 = phi1;
        double r68466 = phi2;
        double r68467 = r68465 + r68466;
        double r68468 = 2.0;
        double r68469 = r68467 / r68468;
        double r68470 = cos(r68469);
        double r68471 = r68464 * r68470;
        double r68472 = r68465 - r68466;
        double r68473 = hypot(r68471, r68472);
        double r68474 = R;
        double r68475 = r68473 * r68474;
        return r68475;
}

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 39.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. Simplified3.8

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

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

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

Reproduce

herbie shell --seed 2020043 +o rules:numerics
(FPCore (R lambda1 lambda2 phi1 phi2)
  :name "Equirectangular approximation to distance on a great circle"
  :precision binary64
  (* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))))