Average Error: 37.1 → 28.9
Time: 26.2s
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.0597824736442374 \cdot 10^{+302}:\\ \;\;\;\;R \cdot \sqrt{\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\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.0597824736442374 \cdot 10^{+302}:\\
\;\;\;\;R \cdot \sqrt{\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\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 r1938762 = R;
        double r1938763 = lambda1;
        double r1938764 = lambda2;
        double r1938765 = r1938763 - r1938764;
        double r1938766 = phi1;
        double r1938767 = phi2;
        double r1938768 = r1938766 + r1938767;
        double r1938769 = 2.0;
        double r1938770 = r1938768 / r1938769;
        double r1938771 = cos(r1938770);
        double r1938772 = r1938765 * r1938771;
        double r1938773 = r1938772 * r1938772;
        double r1938774 = r1938766 - r1938767;
        double r1938775 = r1938774 * r1938774;
        double r1938776 = r1938773 + r1938775;
        double r1938777 = sqrt(r1938776);
        double r1938778 = r1938762 * r1938777;
        return r1938778;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r1938779 = phi1;
        double r1938780 = phi2;
        double r1938781 = r1938779 - r1938780;
        double r1938782 = r1938781 * r1938781;
        double r1938783 = lambda1;
        double r1938784 = lambda2;
        double r1938785 = r1938783 - r1938784;
        double r1938786 = r1938779 + r1938780;
        double r1938787 = 2.0;
        double r1938788 = r1938786 / r1938787;
        double r1938789 = cos(r1938788);
        double r1938790 = r1938785 * r1938789;
        double r1938791 = r1938790 * r1938790;
        double r1938792 = r1938782 + r1938791;
        double r1938793 = 3.0597824736442374e+302;
        bool r1938794 = r1938792 <= r1938793;
        double r1938795 = R;
        double r1938796 = r1938785 * r1938790;
        double r1938797 = r1938789 * r1938796;
        double r1938798 = r1938797 + r1938782;
        double r1938799 = sqrt(r1938798);
        double r1938800 = r1938795 * r1938799;
        double r1938801 = r1938780 - r1938779;
        double r1938802 = r1938801 * r1938795;
        double r1938803 = r1938794 ? r1938800 : r1938802;
        return r1938803;
}

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.0597824736442374e+302

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

      \[\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)}\]

    if 3.0597824736442374e+302 < (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2)))

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

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

    \[\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.0597824736442374 \cdot 10^{+302}:\\ \;\;\;\;R \cdot \sqrt{\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\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 2019153 
(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))))))