Average Error: 37.2 → 32.2
Time: 48.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 -4.23733770204599 \cdot 10^{+84}:\\ \;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\ \mathbf{else}:\\ \;\;\;\;\sqrt{\left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right) + \cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \left(\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) \cdot \left(\lambda_1 - \lambda_2\right)\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}\;\phi_1 \le -4.23733770204599 \cdot 10^{+84}:\\
\;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\

\mathbf{else}:\\
\;\;\;\;\sqrt{\left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right) + \cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \left(\left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right) \cdot \left(\lambda_1 - \lambda_2\right)\right)} \cdot R\\

\end{array}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r5787775 = R;
        double r5787776 = lambda1;
        double r5787777 = lambda2;
        double r5787778 = r5787776 - r5787777;
        double r5787779 = phi1;
        double r5787780 = phi2;
        double r5787781 = r5787779 + r5787780;
        double r5787782 = 2.0;
        double r5787783 = r5787781 / r5787782;
        double r5787784 = cos(r5787783);
        double r5787785 = r5787778 * r5787784;
        double r5787786 = r5787785 * r5787785;
        double r5787787 = r5787779 - r5787780;
        double r5787788 = r5787787 * r5787787;
        double r5787789 = r5787786 + r5787788;
        double r5787790 = sqrt(r5787789);
        double r5787791 = r5787775 * r5787790;
        return r5787791;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r5787792 = phi1;
        double r5787793 = -4.23733770204599e+84;
        bool r5787794 = r5787792 <= r5787793;
        double r5787795 = R;
        double r5787796 = phi2;
        double r5787797 = r5787796 - r5787792;
        double r5787798 = r5787795 * r5787797;
        double r5787799 = r5787792 - r5787796;
        double r5787800 = r5787799 * r5787799;
        double r5787801 = r5787792 + r5787796;
        double r5787802 = 2.0;
        double r5787803 = r5787801 / r5787802;
        double r5787804 = cos(r5787803);
        double r5787805 = lambda1;
        double r5787806 = lambda2;
        double r5787807 = r5787805 - r5787806;
        double r5787808 = r5787807 * r5787804;
        double r5787809 = r5787808 * r5787807;
        double r5787810 = r5787804 * r5787809;
        double r5787811 = r5787800 + r5787810;
        double r5787812 = sqrt(r5787811);
        double r5787813 = r5787812 * r5787795;
        double r5787814 = r5787794 ? r5787798 : r5787813;
        return r5787814;
}

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 < -4.23733770204599e+84

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

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

    if -4.23733770204599e+84 < phi1

    1. Initial program 34.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. Using strategy rm
    3. Applied associate-*r*34.5

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

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

Reproduce

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