Average Error: 37.0 → 3.8
Time: 30.1s
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 r2502465 = R;
        double r2502466 = lambda1;
        double r2502467 = lambda2;
        double r2502468 = r2502466 - r2502467;
        double r2502469 = phi1;
        double r2502470 = phi2;
        double r2502471 = r2502469 + r2502470;
        double r2502472 = 2.0;
        double r2502473 = r2502471 / r2502472;
        double r2502474 = cos(r2502473);
        double r2502475 = r2502468 * r2502474;
        double r2502476 = r2502475 * r2502475;
        double r2502477 = r2502469 - r2502470;
        double r2502478 = r2502477 * r2502477;
        double r2502479 = r2502476 + r2502478;
        double r2502480 = sqrt(r2502479);
        double r2502481 = r2502465 * r2502480;
        return r2502481;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r2502482 = lambda1;
        double r2502483 = lambda2;
        double r2502484 = r2502482 - r2502483;
        double r2502485 = phi1;
        double r2502486 = phi2;
        double r2502487 = r2502485 + r2502486;
        double r2502488 = 2.0;
        double r2502489 = r2502487 / r2502488;
        double r2502490 = cos(r2502489);
        double r2502491 = r2502484 * r2502490;
        double r2502492 = r2502485 - r2502486;
        double r2502493 = hypot(r2502491, r2502492);
        double r2502494 = R;
        double r2502495 = r2502493 * r2502494;
        return r2502495;
}

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. Using strategy rm
  4. Applied *-commutative3.8

    \[\leadsto \color{blue}{R \cdot \mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_2 + \phi_1}{2}\right), \phi_1 - \phi_2\right)}\]
  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 2019149 +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))))))