Average Error: 38.4 → 3.7
Time: 17.0s
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 r75425 = R;
        double r75426 = lambda1;
        double r75427 = lambda2;
        double r75428 = r75426 - r75427;
        double r75429 = phi1;
        double r75430 = phi2;
        double r75431 = r75429 + r75430;
        double r75432 = 2.0;
        double r75433 = r75431 / r75432;
        double r75434 = cos(r75433);
        double r75435 = r75428 * r75434;
        double r75436 = r75435 * r75435;
        double r75437 = r75429 - r75430;
        double r75438 = r75437 * r75437;
        double r75439 = r75436 + r75438;
        double r75440 = sqrt(r75439);
        double r75441 = r75425 * r75440;
        return r75441;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r75442 = lambda1;
        double r75443 = lambda2;
        double r75444 = r75442 - r75443;
        double r75445 = phi1;
        double r75446 = phi2;
        double r75447 = r75445 + r75446;
        double r75448 = 2.0;
        double r75449 = r75447 / r75448;
        double r75450 = cos(r75449);
        double r75451 = r75444 * r75450;
        double r75452 = r75445 - r75446;
        double r75453 = hypot(r75451, r75452);
        double r75454 = R;
        double r75455 = r75453 * r75454;
        return r75455;
}

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 38.4

    \[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(\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.7

    \[\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 \color{blue}{{R}^{1}}\]
  5. Applied pow13.7

    \[\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}^{1}\]
  6. Applied pow-prod-down3.7

    \[\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) \cdot R\right)}^{1}}\]
  7. Final simplification3.7

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