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 2.511829003669042774562463779362177699812 \cdot 10^{124}:\\
\;\;\;\;\sqrt{\left(\sqrt[3]{\cos \left(\frac{\phi_2 + \phi_1}{2}\right) \cdot \left(\cos \left(\frac{\phi_2 + \phi_1}{2}\right) \cdot \cos \left(\frac{\phi_2 + \phi_1}{2}\right)\right)} \cdot \left(\lambda_1 - \lambda_2\right)\right) \cdot \left(\cos \left(\frac{\phi_2 + \phi_1}{2}\right) \cdot \left(\lambda_1 - \lambda_2\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\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 r5038360 = R;
double r5038361 = lambda1;
double r5038362 = lambda2;
double r5038363 = r5038361 - r5038362;
double r5038364 = phi1;
double r5038365 = phi2;
double r5038366 = r5038364 + r5038365;
double r5038367 = 2.0;
double r5038368 = r5038366 / r5038367;
double r5038369 = cos(r5038368);
double r5038370 = r5038363 * r5038369;
double r5038371 = r5038370 * r5038370;
double r5038372 = r5038364 - r5038365;
double r5038373 = r5038372 * r5038372;
double r5038374 = r5038371 + r5038373;
double r5038375 = sqrt(r5038374);
double r5038376 = r5038360 * r5038375;
return r5038376;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r5038377 = phi2;
double r5038378 = 2.511829003669043e+124;
bool r5038379 = r5038377 <= r5038378;
double r5038380 = phi1;
double r5038381 = r5038377 + r5038380;
double r5038382 = 2.0;
double r5038383 = r5038381 / r5038382;
double r5038384 = cos(r5038383);
double r5038385 = r5038384 * r5038384;
double r5038386 = r5038384 * r5038385;
double r5038387 = cbrt(r5038386);
double r5038388 = lambda1;
double r5038389 = lambda2;
double r5038390 = r5038388 - r5038389;
double r5038391 = r5038387 * r5038390;
double r5038392 = r5038384 * r5038390;
double r5038393 = r5038391 * r5038392;
double r5038394 = r5038380 - r5038377;
double r5038395 = r5038394 * r5038394;
double r5038396 = r5038393 + r5038395;
double r5038397 = sqrt(r5038396);
double r5038398 = R;
double r5038399 = r5038397 * r5038398;
double r5038400 = r5038377 - r5038380;
double r5038401 = r5038398 * r5038400;
double r5038402 = r5038379 ? r5038399 : r5038401;
return r5038402;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
if phi2 < 2.511829003669043e+124Initial program 36.1
rmApplied add-cbrt-cube36.1
if 2.511829003669043e+124 < phi2 Initial program 59.0
Taylor expanded around 0 18.9
Final simplification33.7
herbie shell --seed 2019168
(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))))))