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 r5449423 = R;
double r5449424 = lambda1;
double r5449425 = lambda2;
double r5449426 = r5449424 - r5449425;
double r5449427 = phi1;
double r5449428 = phi2;
double r5449429 = r5449427 + r5449428;
double r5449430 = 2.0;
double r5449431 = r5449429 / r5449430;
double r5449432 = cos(r5449431);
double r5449433 = r5449426 * r5449432;
double r5449434 = r5449433 * r5449433;
double r5449435 = r5449427 - r5449428;
double r5449436 = r5449435 * r5449435;
double r5449437 = r5449434 + r5449436;
double r5449438 = sqrt(r5449437);
double r5449439 = r5449423 * r5449438;
return r5449439;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r5449440 = phi1;
double r5449441 = phi2;
double r5449442 = r5449440 - r5449441;
double r5449443 = r5449442 * r5449442;
double r5449444 = lambda1;
double r5449445 = lambda2;
double r5449446 = r5449444 - r5449445;
double r5449447 = r5449440 + r5449441;
double r5449448 = 2.0;
double r5449449 = r5449447 / r5449448;
double r5449450 = cos(r5449449);
double r5449451 = r5449446 * r5449450;
double r5449452 = r5449451 * r5449451;
double r5449453 = r5449443 + r5449452;
double r5449454 = 3.2379687723285626e+298;
bool r5449455 = r5449453 <= r5449454;
double r5449456 = R;
double r5449457 = r5449450 * r5449450;
double r5449458 = r5449450 * r5449457;
double r5449459 = cbrt(r5449458);
double r5449460 = r5449459 * r5449446;
double r5449461 = r5449460 * r5449451;
double r5449462 = r5449461 + r5449443;
double r5449463 = sqrt(r5449462);
double r5449464 = r5449456 * r5449463;
double r5449465 = r5449441 - r5449440;
double r5449466 = r5449465 * r5449456;
double r5449467 = r5449455 ? r5449464 : r5449466;
return r5449467;
}



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