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(\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) \le 5.03012472402946357 \cdot 10^{304}:\\
\;\;\;\;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 \left(\left(\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)} \cdot \sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\right) \cdot \sqrt[3]{\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}:\\
\;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\
\end{array}double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r69209 = R;
double r69210 = lambda1;
double r69211 = lambda2;
double r69212 = r69210 - r69211;
double r69213 = phi1;
double r69214 = phi2;
double r69215 = r69213 + r69214;
double r69216 = 2.0;
double r69217 = r69215 / r69216;
double r69218 = cos(r69217);
double r69219 = r69212 * r69218;
double r69220 = r69219 * r69219;
double r69221 = r69213 - r69214;
double r69222 = r69221 * r69221;
double r69223 = r69220 + r69222;
double r69224 = sqrt(r69223);
double r69225 = r69209 * r69224;
return r69225;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r69226 = lambda1;
double r69227 = lambda2;
double r69228 = r69226 - r69227;
double r69229 = phi1;
double r69230 = phi2;
double r69231 = r69229 + r69230;
double r69232 = 2.0;
double r69233 = r69231 / r69232;
double r69234 = cos(r69233);
double r69235 = r69228 * r69234;
double r69236 = r69235 * r69235;
double r69237 = r69229 - r69230;
double r69238 = r69237 * r69237;
double r69239 = r69236 + r69238;
double r69240 = 5.030124724029464e+304;
bool r69241 = r69239 <= r69240;
double r69242 = R;
double r69243 = cbrt(r69234);
double r69244 = r69243 * r69243;
double r69245 = r69244 * r69243;
double r69246 = r69228 * r69245;
double r69247 = r69235 * r69246;
double r69248 = r69247 + r69238;
double r69249 = sqrt(r69248);
double r69250 = r69242 * r69249;
double r69251 = r69230 - r69229;
double r69252 = r69242 * r69251;
double r69253 = r69241 ? r69250 : r69252;
return r69253;
}



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.0))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0)))) (* (- phi1 phi2) (- phi1 phi2))) < 5.030124724029464e+304Initial program 2.0
rmApplied add-cube-cbrt2.1
if 5.030124724029464e+304 < (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0)))) (* (- phi1 phi2) (- phi1 phi2))) Initial program 63.3
Taylor expanded around 0 47.1
Final simplification29.6
herbie shell --seed 2020042
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Equirectangular approximation to distance on a great circle"
:precision binary64
(* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))))