Average Error: 37.3 → 3.9
Time: 30.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(\lambda_1 - \lambda_2\right) \cdot \sqrt[3]{\left(\cos \left(\frac{\phi_2 + \phi_1}{2}\right) \cdot \log \left(e^{\cos \left(\frac{\phi_2 + \phi_1}{2}\right)}\right)\right) \cdot \cos \left(\frac{\phi_2 + \phi_1}{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 \sqrt[3]{\left(\cos \left(\frac{\phi_2 + \phi_1}{2}\right) \cdot \log \left(e^{\cos \left(\frac{\phi_2 + \phi_1}{2}\right)}\right)\right) \cdot \cos \left(\frac{\phi_2 + \phi_1}{2}\right)}, \phi_1 - \phi_2\right) \cdot R
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r2932990 = R;
        double r2932991 = lambda1;
        double r2932992 = lambda2;
        double r2932993 = r2932991 - r2932992;
        double r2932994 = phi1;
        double r2932995 = phi2;
        double r2932996 = r2932994 + r2932995;
        double r2932997 = 2.0;
        double r2932998 = r2932996 / r2932997;
        double r2932999 = cos(r2932998);
        double r2933000 = r2932993 * r2932999;
        double r2933001 = r2933000 * r2933000;
        double r2933002 = r2932994 - r2932995;
        double r2933003 = r2933002 * r2933002;
        double r2933004 = r2933001 + r2933003;
        double r2933005 = sqrt(r2933004);
        double r2933006 = r2932990 * r2933005;
        return r2933006;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r2933007 = lambda1;
        double r2933008 = lambda2;
        double r2933009 = r2933007 - r2933008;
        double r2933010 = phi2;
        double r2933011 = phi1;
        double r2933012 = r2933010 + r2933011;
        double r2933013 = 2.0;
        double r2933014 = r2933012 / r2933013;
        double r2933015 = cos(r2933014);
        double r2933016 = exp(r2933015);
        double r2933017 = log(r2933016);
        double r2933018 = r2933015 * r2933017;
        double r2933019 = r2933018 * r2933015;
        double r2933020 = cbrt(r2933019);
        double r2933021 = r2933009 * r2933020;
        double r2933022 = r2933011 - r2933010;
        double r2933023 = hypot(r2933021, r2933022);
        double r2933024 = R;
        double r2933025 = r2933023 * r2933024;
        return r2933025;
}

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.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.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 add-cbrt-cube3.9

    \[\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. Using strategy rm
  6. Applied add-log-exp3.9

    \[\leadsto \mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \sqrt[3]{\left(\color{blue}{\log \left(e^{\cos \left(\frac{\phi_2 + \phi_1}{2}\right)}\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\]
  7. Final simplification3.9

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

Reproduce

herbie shell --seed 2019143 +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))))))