Average Error: 37.0 → 32.3
Time: 32.4s
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 -1.5088331521040592 \cdot 10^{+17}:\\ \;\;\;\;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 -1.5088331521040592 \cdot 10^{+17}:\\
\;\;\;\;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 r3242764 = R;
        double r3242765 = lambda1;
        double r3242766 = lambda2;
        double r3242767 = r3242765 - r3242766;
        double r3242768 = phi1;
        double r3242769 = phi2;
        double r3242770 = r3242768 + r3242769;
        double r3242771 = 2.0;
        double r3242772 = r3242770 / r3242771;
        double r3242773 = cos(r3242772);
        double r3242774 = r3242767 * r3242773;
        double r3242775 = r3242774 * r3242774;
        double r3242776 = r3242768 - r3242769;
        double r3242777 = r3242776 * r3242776;
        double r3242778 = r3242775 + r3242777;
        double r3242779 = sqrt(r3242778);
        double r3242780 = r3242764 * r3242779;
        return r3242780;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r3242781 = phi1;
        double r3242782 = -1.5088331521040592e+17;
        bool r3242783 = r3242781 <= r3242782;
        double r3242784 = R;
        double r3242785 = phi2;
        double r3242786 = r3242785 - r3242781;
        double r3242787 = r3242784 * r3242786;
        double r3242788 = r3242781 - r3242785;
        double r3242789 = r3242788 * r3242788;
        double r3242790 = r3242781 + r3242785;
        double r3242791 = 2.0;
        double r3242792 = r3242790 / r3242791;
        double r3242793 = cos(r3242792);
        double r3242794 = lambda1;
        double r3242795 = lambda2;
        double r3242796 = r3242794 - r3242795;
        double r3242797 = r3242796 * r3242793;
        double r3242798 = r3242797 * r3242796;
        double r3242799 = r3242793 * r3242798;
        double r3242800 = r3242789 + r3242799;
        double r3242801 = sqrt(r3242800);
        double r3242802 = r3242801 * r3242784;
        double r3242803 = r3242783 ? r3242787 : r3242802;
        return r3242803;
}

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 < -1.5088331521040592e+17

    1. Initial program 46.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 associate-*r*46.1

      \[\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)}\]
    4. Taylor expanded around 0 24.9

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

    if -1.5088331521040592e+17 < phi1

    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 associate-*r*34.4

      \[\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.3

    \[\leadsto \begin{array}{l} \mathbf{if}\;\phi_1 \le -1.5088331521040592 \cdot 10^{+17}:\\ \;\;\;\;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 2019130 
(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))))))