Average Error: 39.2 → 33.7
Time: 1.0m
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)}\]
\[\begin{array}{l} \mathbf{if}\;\phi_2 \le 2.511829003669042774562463779362177699812 \cdot 10^{124}:\\ \;\;\;\;\sqrt{\left(\sqrt[3]{\cos \left(\frac{\phi_2 + \phi_1}{2}\right) \cdot \left(\cos \left(\frac{\phi_2 + \phi_1}{2}\right) \cdot \cos \left(\frac{\phi_2 + \phi_1}{2}\right)\right)} \cdot \left(\lambda_1 - \lambda_2\right)\right) \cdot \left(\cos \left(\frac{\phi_2 + \phi_1}{2}\right) \cdot \left(\lambda_1 - \lambda_2\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)} \cdot R\\ \mathbf{else}:\\ \;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\ \end{array}\]
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)}
\begin{array}{l}
\mathbf{if}\;\phi_2 \le 2.511829003669042774562463779362177699812 \cdot 10^{124}:\\
\;\;\;\;\sqrt{\left(\sqrt[3]{\cos \left(\frac{\phi_2 + \phi_1}{2}\right) \cdot \left(\cos \left(\frac{\phi_2 + \phi_1}{2}\right) \cdot \cos \left(\frac{\phi_2 + \phi_1}{2}\right)\right)} \cdot \left(\lambda_1 - \lambda_2\right)\right) \cdot \left(\cos \left(\frac{\phi_2 + \phi_1}{2}\right) \cdot \left(\lambda_1 - \lambda_2\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)} \cdot R\\

\mathbf{else}:\\
\;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\

\end{array}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r5038360 = R;
        double r5038361 = lambda1;
        double r5038362 = lambda2;
        double r5038363 = r5038361 - r5038362;
        double r5038364 = phi1;
        double r5038365 = phi2;
        double r5038366 = r5038364 + r5038365;
        double r5038367 = 2.0;
        double r5038368 = r5038366 / r5038367;
        double r5038369 = cos(r5038368);
        double r5038370 = r5038363 * r5038369;
        double r5038371 = r5038370 * r5038370;
        double r5038372 = r5038364 - r5038365;
        double r5038373 = r5038372 * r5038372;
        double r5038374 = r5038371 + r5038373;
        double r5038375 = sqrt(r5038374);
        double r5038376 = r5038360 * r5038375;
        return r5038376;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r5038377 = phi2;
        double r5038378 = 2.511829003669043e+124;
        bool r5038379 = r5038377 <= r5038378;
        double r5038380 = phi1;
        double r5038381 = r5038377 + r5038380;
        double r5038382 = 2.0;
        double r5038383 = r5038381 / r5038382;
        double r5038384 = cos(r5038383);
        double r5038385 = r5038384 * r5038384;
        double r5038386 = r5038384 * r5038385;
        double r5038387 = cbrt(r5038386);
        double r5038388 = lambda1;
        double r5038389 = lambda2;
        double r5038390 = r5038388 - r5038389;
        double r5038391 = r5038387 * r5038390;
        double r5038392 = r5038384 * r5038390;
        double r5038393 = r5038391 * r5038392;
        double r5038394 = r5038380 - r5038377;
        double r5038395 = r5038394 * r5038394;
        double r5038396 = r5038393 + r5038395;
        double r5038397 = sqrt(r5038396);
        double r5038398 = R;
        double r5038399 = r5038397 * r5038398;
        double r5038400 = r5038377 - r5038380;
        double r5038401 = r5038398 * r5038400;
        double r5038402 = r5038379 ? r5038399 : r5038401;
        return r5038402;
}

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. Split input into 2 regimes
  2. if phi2 < 2.511829003669043e+124

    1. Initial program 36.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. Using strategy rm
    3. Applied add-cbrt-cube36.1

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

    if 2.511829003669043e+124 < phi2

    1. Initial program 59.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. Taylor expanded around 0 18.9

      \[\leadsto R \cdot \color{blue}{\left(\phi_2 - \phi_1\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification33.7

    \[\leadsto \begin{array}{l} \mathbf{if}\;\phi_2 \le 2.511829003669042774562463779362177699812 \cdot 10^{124}:\\ \;\;\;\;\sqrt{\left(\sqrt[3]{\cos \left(\frac{\phi_2 + \phi_1}{2}\right) \cdot \left(\cos \left(\frac{\phi_2 + \phi_1}{2}\right) \cdot \cos \left(\frac{\phi_2 + \phi_1}{2}\right)\right)} \cdot \left(\lambda_1 - \lambda_2\right)\right) \cdot \left(\cos \left(\frac{\phi_2 + \phi_1}{2}\right) \cdot \left(\lambda_1 - \lambda_2\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)} \cdot R\\ \mathbf{else}:\\ \;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019168 
(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))))))