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_1 \le -13.5182124464300184:\\
\;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\
\mathbf{else}:\\
\;\;\;\;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)}\\
\end{array}double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r79591 = R;
double r79592 = lambda1;
double r79593 = lambda2;
double r79594 = r79592 - r79593;
double r79595 = phi1;
double r79596 = phi2;
double r79597 = r79595 + r79596;
double r79598 = 2.0;
double r79599 = r79597 / r79598;
double r79600 = cos(r79599);
double r79601 = r79594 * r79600;
double r79602 = r79601 * r79601;
double r79603 = r79595 - r79596;
double r79604 = r79603 * r79603;
double r79605 = r79602 + r79604;
double r79606 = sqrt(r79605);
double r79607 = r79591 * r79606;
return r79607;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r79608 = phi1;
double r79609 = -13.518212446430018;
bool r79610 = r79608 <= r79609;
double r79611 = R;
double r79612 = phi2;
double r79613 = r79612 - r79608;
double r79614 = r79611 * r79613;
double r79615 = lambda1;
double r79616 = lambda2;
double r79617 = r79615 - r79616;
double r79618 = r79608 + r79612;
double r79619 = 2.0;
double r79620 = r79618 / r79619;
double r79621 = cos(r79620);
double r79622 = r79617 * r79621;
double r79623 = cbrt(r79621);
double r79624 = r79623 * r79623;
double r79625 = r79624 * r79623;
double r79626 = r79617 * r79625;
double r79627 = r79622 * r79626;
double r79628 = r79608 - r79612;
double r79629 = r79628 * r79628;
double r79630 = r79627 + r79629;
double r79631 = sqrt(r79630);
double r79632 = r79611 * r79631;
double r79633 = r79610 ? r79614 : r79632;
return r79633;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
if phi1 < -13.518212446430018Initial program 47.2
Taylor expanded around 0 26.5
if -13.518212446430018 < phi1 Initial program 36.7
rmApplied add-cube-cbrt36.8
Final simplification34.2
herbie shell --seed 2020046
(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))))))