Average Error: 39.3 → 4.0
Time: 23.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)}\]
\[R \cdot \mathsf{hypot}\left(\sqrt[3]{{\left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right)}^{3}} \cdot \left(\lambda_1 - \lambda_2\right), \phi_1 - \phi_2\right)\]
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)}
R \cdot \mathsf{hypot}\left(\sqrt[3]{{\left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right)}^{3}} \cdot \left(\lambda_1 - \lambda_2\right), \phi_1 - \phi_2\right)
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r87541 = R;
        double r87542 = lambda1;
        double r87543 = lambda2;
        double r87544 = r87542 - r87543;
        double r87545 = phi1;
        double r87546 = phi2;
        double r87547 = r87545 + r87546;
        double r87548 = 2.0;
        double r87549 = r87547 / r87548;
        double r87550 = cos(r87549);
        double r87551 = r87544 * r87550;
        double r87552 = r87551 * r87551;
        double r87553 = r87545 - r87546;
        double r87554 = r87553 * r87553;
        double r87555 = r87552 + r87554;
        double r87556 = sqrt(r87555);
        double r87557 = r87541 * r87556;
        return r87557;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r87558 = R;
        double r87559 = phi1;
        double r87560 = phi2;
        double r87561 = r87559 + r87560;
        double r87562 = 2.0;
        double r87563 = r87561 / r87562;
        double r87564 = cos(r87563);
        double r87565 = 3.0;
        double r87566 = pow(r87564, r87565);
        double r87567 = cbrt(r87566);
        double r87568 = lambda1;
        double r87569 = lambda2;
        double r87570 = r87568 - r87569;
        double r87571 = r87567 * r87570;
        double r87572 = r87559 - r87560;
        double r87573 = hypot(r87571, r87572);
        double r87574 = r87558 * r87573;
        return r87574;
}

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

    \[\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 add-cbrt-cube4.0

    \[\leadsto \mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \color{blue}{\sqrt[3]{\left(\cos \left(\frac{\phi_2 + \phi_1}{2}\right) \cdot \cos \left(\frac{\phi_2 + \phi_1}{2}\right)\right) \cdot \cos \left(\frac{\phi_2 + \phi_1}{2}\right)}}, \phi_1 - \phi_2\right) \cdot R\]
  5. Simplified4.0

    \[\leadsto \mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \sqrt[3]{\color{blue}{{\left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right)}^{3}}}, \phi_1 - \phi_2\right) \cdot R\]
  6. Final simplification4.0

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

Reproduce

herbie shell --seed 2019179 +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.0))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0)))) (* (- phi1 phi2) (- phi1 phi2))))))