Average Error: 37.1 → 32.8
Time: 33.3s
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 1.400742996618376 \cdot 10^{-20}:\\ \;\;\;\;\sqrt{\left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right) + \left(\cos \left(\frac{\phi_2 + \phi_1}{2}\right) \cdot \left(\lambda_1 - \lambda_2\right)\right) \cdot \left(\log \left(e^{\cos \left(\frac{\phi_2 + \phi_1}{2}\right)}\right) \cdot \left(\lambda_1 - \lambda_2\right)\right)} \cdot R\\ \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 1.400742996618376 \cdot 10^{-20}:\\
\;\;\;\;\sqrt{\left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right) + \left(\cos \left(\frac{\phi_2 + \phi_1}{2}\right) \cdot \left(\lambda_1 - \lambda_2\right)\right) \cdot \left(\log \left(e^{\cos \left(\frac{\phi_2 + \phi_1}{2}\right)}\right) \cdot \left(\lambda_1 - \lambda_2\right)\right)} \cdot R\\

\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 r4161169 = R;
        double r4161170 = lambda1;
        double r4161171 = lambda2;
        double r4161172 = r4161170 - r4161171;
        double r4161173 = phi1;
        double r4161174 = phi2;
        double r4161175 = r4161173 + r4161174;
        double r4161176 = 2.0;
        double r4161177 = r4161175 / r4161176;
        double r4161178 = cos(r4161177);
        double r4161179 = r4161172 * r4161178;
        double r4161180 = r4161179 * r4161179;
        double r4161181 = r4161173 - r4161174;
        double r4161182 = r4161181 * r4161181;
        double r4161183 = r4161180 + r4161182;
        double r4161184 = sqrt(r4161183);
        double r4161185 = r4161169 * r4161184;
        return r4161185;
}

double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
        double r4161186 = phi2;
        double r4161187 = 1.400742996618376e-20;
        bool r4161188 = r4161186 <= r4161187;
        double r4161189 = phi1;
        double r4161190 = r4161189 - r4161186;
        double r4161191 = r4161190 * r4161190;
        double r4161192 = r4161186 + r4161189;
        double r4161193 = 2.0;
        double r4161194 = r4161192 / r4161193;
        double r4161195 = cos(r4161194);
        double r4161196 = lambda1;
        double r4161197 = lambda2;
        double r4161198 = r4161196 - r4161197;
        double r4161199 = r4161195 * r4161198;
        double r4161200 = exp(r4161195);
        double r4161201 = log(r4161200);
        double r4161202 = r4161201 * r4161198;
        double r4161203 = r4161199 * r4161202;
        double r4161204 = r4161191 + r4161203;
        double r4161205 = sqrt(r4161204);
        double r4161206 = R;
        double r4161207 = r4161205 * r4161206;
        double r4161208 = r4161186 - r4161189;
        double r4161209 = r4161206 * r4161208;
        double r4161210 = r4161188 ? r4161207 : r4161209;
        return r4161210;
}

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 < 1.400742996618376e-20

    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 add-log-exp34.4

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

    if 1.400742996618376e-20 < phi2

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

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

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

Reproduce

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