Average Error: 37.4 → 29.6
Time: 34.9s
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}\;\left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right) + \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) \le 3.2379687723285626 \cdot 10^{+298}:\\ \;\;\;\;R \cdot \sqrt{\left(\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right)} \cdot \left(\lambda_1 - \lambda_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)}\\ \mathbf{else}:\\ \;\;\;\;\left(\phi_2 - \phi_1\right) \cdot R\\ \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}\;\left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right) + \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) \le 3.2379687723285626 \cdot 10^{+298}:\\
\;\;\;\;R \cdot \sqrt{\left(\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right)} \cdot \left(\lambda_1 - \lambda_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)}\\

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

\end{array}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r5449423 = R;
        double r5449424 = lambda1;
        double r5449425 = lambda2;
        double r5449426 = r5449424 - r5449425;
        double r5449427 = phi1;
        double r5449428 = phi2;
        double r5449429 = r5449427 + r5449428;
        double r5449430 = 2.0;
        double r5449431 = r5449429 / r5449430;
        double r5449432 = cos(r5449431);
        double r5449433 = r5449426 * r5449432;
        double r5449434 = r5449433 * r5449433;
        double r5449435 = r5449427 - r5449428;
        double r5449436 = r5449435 * r5449435;
        double r5449437 = r5449434 + r5449436;
        double r5449438 = sqrt(r5449437);
        double r5449439 = r5449423 * r5449438;
        return r5449439;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r5449440 = phi1;
        double r5449441 = phi2;
        double r5449442 = r5449440 - r5449441;
        double r5449443 = r5449442 * r5449442;
        double r5449444 = lambda1;
        double r5449445 = lambda2;
        double r5449446 = r5449444 - r5449445;
        double r5449447 = r5449440 + r5449441;
        double r5449448 = 2.0;
        double r5449449 = r5449447 / r5449448;
        double r5449450 = cos(r5449449);
        double r5449451 = r5449446 * r5449450;
        double r5449452 = r5449451 * r5449451;
        double r5449453 = r5449443 + r5449452;
        double r5449454 = 3.2379687723285626e+298;
        bool r5449455 = r5449453 <= r5449454;
        double r5449456 = R;
        double r5449457 = r5449450 * r5449450;
        double r5449458 = r5449450 * r5449457;
        double r5449459 = cbrt(r5449458);
        double r5449460 = r5449459 * r5449446;
        double r5449461 = r5449460 * r5449451;
        double r5449462 = r5449461 + r5449443;
        double r5449463 = sqrt(r5449462);
        double r5449464 = r5449456 * r5449463;
        double r5449465 = r5449441 - r5449440;
        double r5449466 = r5449465 * r5449456;
        double r5449467 = r5449455 ? r5449464 : r5449466;
        return r5449467;
}

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 (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))) < 3.2379687723285626e+298

    1. Initial program 1.9

      \[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-cube1.9

      \[\leadsto 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 \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) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\]

    if 3.2379687723285626e+298 < (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))

    1. Initial program 59.5

      \[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 46.8

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right) + \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) \le 3.2379687723285626 \cdot 10^{+298}:\\ \;\;\;\;R \cdot \sqrt{\left(\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right)} \cdot \left(\lambda_1 - \lambda_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)}\\ \mathbf{else}:\\ \;\;\;\;\left(\phi_2 - \phi_1\right) \cdot R\\ \end{array}\]

Reproduce

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