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 r12136717 = R;
        double r12136718 = lambda1;
        double r12136719 = lambda2;
        double r12136720 = r12136718 - r12136719;
        double r12136721 = phi1;
        double r12136722 = phi2;
        double r12136723 = r12136721 + r12136722;
        double r12136724 = 2.0;
        double r12136725 = r12136723 / r12136724;
        double r12136726 = cos(r12136725);
        double r12136727 = r12136720 * r12136726;
        double r12136728 = r12136727 * r12136727;
        double r12136729 = r12136721 - r12136722;
        double r12136730 = r12136729 * r12136729;
        double r12136731 = r12136728 + r12136730;
        double r12136732 = sqrt(r12136731);
        double r12136733 = r12136717 * r12136732;
        return r12136733;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r12136734 = phi2;
        double r12136735 = 9.379999870736137e+53;
        bool r12136736 = r12136734 <= r12136735;
        double r12136737 = R;
        double r12136738 = lambda1;
        double r12136739 = lambda2;
        double r12136740 = r12136738 - r12136739;
        double r12136741 = phi1;
        double r12136742 = r12136741 + r12136734;
        double r12136743 = 2.0;
        double r12136744 = r12136742 / r12136743;
        double r12136745 = cos(r12136744);
        double r12136746 = r12136745 * r12136740;
        double r12136747 = r12136745 * r12136746;
        double r12136748 = r12136740 * r12136747;
        double r12136749 = r12136741 - r12136734;
        double r12136750 = r12136749 * r12136749;
        double r12136751 = r12136748 + r12136750;
        double r12136752 = sqrt(r12136751);
        double r12136753 = r12136737 * r12136752;
        double r12136754 = r12136734 - r12136741;
        double r12136755 = r12136737 * r12136754;
        double r12136756 = r12136736 ? r12136753 : r12136755;
        return r12136756;
}

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))))))