Average Error: 39.3 → 34.4
Time: 4.7m
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 9.37999987073613691256390226753120036995 \cdot 10^{53}:\\ \;\;\;\;R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \left(\lambda_1 - \lambda_2\right)\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\\ \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 9.37999987073613691256390226753120036995 \cdot 10^{53}:\\
\;\;\;\;R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \left(\lambda_1 - \lambda_2\right)\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\\

\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 r12006695 = R;
        double r12006696 = lambda1;
        double r12006697 = lambda2;
        double r12006698 = r12006696 - r12006697;
        double r12006699 = phi1;
        double r12006700 = phi2;
        double r12006701 = r12006699 + r12006700;
        double r12006702 = 2.0;
        double r12006703 = r12006701 / r12006702;
        double r12006704 = cos(r12006703);
        double r12006705 = r12006698 * r12006704;
        double r12006706 = r12006705 * r12006705;
        double r12006707 = r12006699 - r12006700;
        double r12006708 = r12006707 * r12006707;
        double r12006709 = r12006706 + r12006708;
        double r12006710 = sqrt(r12006709);
        double r12006711 = r12006695 * r12006710;
        return r12006711;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r12006712 = phi2;
        double r12006713 = 9.379999870736137e+53;
        bool r12006714 = r12006712 <= r12006713;
        double r12006715 = R;
        double r12006716 = lambda1;
        double r12006717 = lambda2;
        double r12006718 = r12006716 - r12006717;
        double r12006719 = phi1;
        double r12006720 = r12006719 + r12006712;
        double r12006721 = 2.0;
        double r12006722 = r12006720 / r12006721;
        double r12006723 = cos(r12006722);
        double r12006724 = r12006723 * r12006718;
        double r12006725 = r12006723 * r12006724;
        double r12006726 = r12006718 * r12006725;
        double r12006727 = r12006719 - r12006712;
        double r12006728 = r12006727 * r12006727;
        double r12006729 = r12006726 + r12006728;
        double r12006730 = sqrt(r12006729);
        double r12006731 = r12006715 * r12006730;
        double r12006732 = r12006712 - r12006719;
        double r12006733 = r12006715 * r12006732;
        double r12006734 = r12006714 ? r12006731 : r12006733;
        return r12006734;
}

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 < 9.379999870736137e+53

    1. Initial program 36.7

      \[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-*l*36.7

      \[\leadsto R \cdot \sqrt{\color{blue}{\left(\lambda_1 - \lambda_2\right) \cdot \left(\cos \left(\frac{\phi_1 + \phi_2}{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)}\]

    if 9.379999870736137e+53 < phi2

    1. Initial program 50.3

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

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

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

Reproduce

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