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.2379687723285626 \cdot 10^{+298}:\\
\;\;\;\;R \cdot \sqrt{\left(\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right)} \cdot \left(\lambda_1 - \lambda_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)}\\
\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 r6386034 = R;
double r6386035 = lambda1;
double r6386036 = lambda2;
double r6386037 = r6386035 - r6386036;
double r6386038 = phi1;
double r6386039 = phi2;
double r6386040 = r6386038 + r6386039;
double r6386041 = 2.0;
double r6386042 = r6386040 / r6386041;
double r6386043 = cos(r6386042);
double r6386044 = r6386037 * r6386043;
double r6386045 = r6386044 * r6386044;
double r6386046 = r6386038 - r6386039;
double r6386047 = r6386046 * r6386046;
double r6386048 = r6386045 + r6386047;
double r6386049 = sqrt(r6386048);
double r6386050 = r6386034 * r6386049;
return r6386050;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r6386051 = phi1;
double r6386052 = phi2;
double r6386053 = r6386051 - r6386052;
double r6386054 = r6386053 * r6386053;
double r6386055 = lambda1;
double r6386056 = lambda2;
double r6386057 = r6386055 - r6386056;
double r6386058 = r6386051 + r6386052;
double r6386059 = 2.0;
double r6386060 = r6386058 / r6386059;
double r6386061 = cos(r6386060);
double r6386062 = r6386057 * r6386061;
double r6386063 = r6386062 * r6386062;
double r6386064 = r6386054 + r6386063;
double r6386065 = 3.2379687723285626e+298;
bool r6386066 = r6386064 <= r6386065;
double r6386067 = R;
double r6386068 = r6386061 * r6386061;
double r6386069 = r6386061 * r6386068;
double r6386070 = cbrt(r6386069);
double r6386071 = r6386070 * r6386057;
double r6386072 = r6386071 * r6386062;
double r6386073 = r6386072 + r6386054;
double r6386074 = sqrt(r6386073);
double r6386075 = r6386067 * r6386074;
double r6386076 = r6386052 - r6386051;
double r6386077 = r6386076 * r6386067;
double r6386078 = r6386066 ? r6386075 : r6386077;
return r6386078;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
if (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))) < 3.2379687723285626e+298Initial program 1.9
rmApplied add-cbrt-cube1.9
if 3.2379687723285626e+298 < (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))) Initial program 59.5
Taylor expanded around 0 46.8
Final simplification29.6
herbie shell --seed 2019163
(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))))))