Average Error: 37.1 → 32.8
Time: 49.7s
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 1.400742996618376 \cdot 10^{-20}:\\ \;\;\;\;\sqrt{\left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right) + \left(\cos \left(\frac{\phi_2 + \phi_1}{2}\right) \cdot \left(\lambda_1 - \lambda_2\right)\right) \cdot \left(\log \left(e^{\cos \left(\frac{\phi_2 + \phi_1}{2}\right)}\right) \cdot \left(\lambda_1 - \lambda_2\right)\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 1.400742996618376 \cdot 10^{-20}:\\
\;\;\;\;\sqrt{\left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right) + \left(\cos \left(\frac{\phi_2 + \phi_1}{2}\right) \cdot \left(\lambda_1 - \lambda_2\right)\right) \cdot \left(\log \left(e^{\cos \left(\frac{\phi_2 + \phi_1}{2}\right)}\right) \cdot \left(\lambda_1 - \lambda_2\right)\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 r5083528 = R;
        double r5083529 = lambda1;
        double r5083530 = lambda2;
        double r5083531 = r5083529 - r5083530;
        double r5083532 = phi1;
        double r5083533 = phi2;
        double r5083534 = r5083532 + r5083533;
        double r5083535 = 2.0;
        double r5083536 = r5083534 / r5083535;
        double r5083537 = cos(r5083536);
        double r5083538 = r5083531 * r5083537;
        double r5083539 = r5083538 * r5083538;
        double r5083540 = r5083532 - r5083533;
        double r5083541 = r5083540 * r5083540;
        double r5083542 = r5083539 + r5083541;
        double r5083543 = sqrt(r5083542);
        double r5083544 = r5083528 * r5083543;
        return r5083544;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r5083545 = phi2;
        double r5083546 = 1.400742996618376e-20;
        bool r5083547 = r5083545 <= r5083546;
        double r5083548 = phi1;
        double r5083549 = r5083548 - r5083545;
        double r5083550 = r5083549 * r5083549;
        double r5083551 = r5083545 + r5083548;
        double r5083552 = 2.0;
        double r5083553 = r5083551 / r5083552;
        double r5083554 = cos(r5083553);
        double r5083555 = lambda1;
        double r5083556 = lambda2;
        double r5083557 = r5083555 - r5083556;
        double r5083558 = r5083554 * r5083557;
        double r5083559 = exp(r5083554);
        double r5083560 = log(r5083559);
        double r5083561 = r5083560 * r5083557;
        double r5083562 = r5083558 * r5083561;
        double r5083563 = r5083550 + r5083562;
        double r5083564 = sqrt(r5083563);
        double r5083565 = R;
        double r5083566 = r5083564 * r5083565;
        double r5083567 = r5083545 - r5083548;
        double r5083568 = r5083565 * r5083567;
        double r5083569 = r5083547 ? r5083566 : r5083568;
        return r5083569;
}

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 < 1.400742996618376e-20

    1. Initial program 34.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. Using strategy rm
    3. Applied add-log-exp34.4

      \[\leadsto R \cdot \sqrt{\left(\left(\lambda_1 - \lambda_2\right) \cdot \color{blue}{\log \left(e^{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\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 1.400742996618376e-20 < phi2

    1. Initial program 45.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 27.6

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

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

Reproduce

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