Average Error: 39.8 → 34.7
Time: 22.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_1 \le -7.31940438578337662982486339028864318973 \cdot 10^{46}:\\ \;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\ \mathbf{else}:\\ \;\;\;\;R \cdot \sqrt{\left(\left(\lambda_1 - \lambda_2\right) \cdot \left(\log \left(\sqrt{e^{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}}\right) + \log \left(\sqrt{e^{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}}\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)}\\ \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_1 \le -7.31940438578337662982486339028864318973 \cdot 10^{46}:\\
\;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\

\mathbf{else}:\\
\;\;\;\;R \cdot \sqrt{\left(\left(\lambda_1 - \lambda_2\right) \cdot \left(\log \left(\sqrt{e^{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}}\right) + \log \left(\sqrt{e^{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}}\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)}\\

\end{array}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r96378 = R;
        double r96379 = lambda1;
        double r96380 = lambda2;
        double r96381 = r96379 - r96380;
        double r96382 = phi1;
        double r96383 = phi2;
        double r96384 = r96382 + r96383;
        double r96385 = 2.0;
        double r96386 = r96384 / r96385;
        double r96387 = cos(r96386);
        double r96388 = r96381 * r96387;
        double r96389 = r96388 * r96388;
        double r96390 = r96382 - r96383;
        double r96391 = r96390 * r96390;
        double r96392 = r96389 + r96391;
        double r96393 = sqrt(r96392);
        double r96394 = r96378 * r96393;
        return r96394;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r96395 = phi1;
        double r96396 = -7.319404385783377e+46;
        bool r96397 = r96395 <= r96396;
        double r96398 = R;
        double r96399 = phi2;
        double r96400 = r96399 - r96395;
        double r96401 = r96398 * r96400;
        double r96402 = lambda1;
        double r96403 = lambda2;
        double r96404 = r96402 - r96403;
        double r96405 = r96395 + r96399;
        double r96406 = 2.0;
        double r96407 = r96405 / r96406;
        double r96408 = cos(r96407);
        double r96409 = exp(r96408);
        double r96410 = sqrt(r96409);
        double r96411 = log(r96410);
        double r96412 = r96411 + r96411;
        double r96413 = r96404 * r96412;
        double r96414 = r96404 * r96408;
        double r96415 = r96413 * r96414;
        double r96416 = r96395 - r96399;
        double r96417 = r96416 * r96416;
        double r96418 = r96415 + r96417;
        double r96419 = sqrt(r96418);
        double r96420 = r96398 * r96419;
        double r96421 = r96397 ? r96401 : r96420;
        return r96421;
}

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 phi1 < -7.319404385783377e+46

    1. Initial program 50.8

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

      \[\leadsto R \cdot \color{blue}{\left(\phi_2 - \phi_1\right)}\]

    if -7.319404385783377e+46 < phi1

    1. Initial program 37.2

      \[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-exp37.2

      \[\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)}\]
    4. Using strategy rm
    5. Applied add-sqr-sqrt37.2

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

      \[\leadsto R \cdot \sqrt{\left(\left(\lambda_1 - \lambda_2\right) \cdot \color{blue}{\left(\log \left(\sqrt{e^{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}}\right) + \log \left(\sqrt{e^{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}}\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)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification34.7

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

Reproduce

herbie shell --seed 2019308 
(FPCore (R lambda1 lambda2 phi1 phi2)
  :name "Equirectangular approximation to distance on a great circle"
  :precision binary64
  (* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))))