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 7.191645331488462 \cdot 10^{+104}:\\
\;\;\;\;R \cdot \sqrt{\left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right) + \left(\left(\lambda_1 - \lambda_2\right) \cdot \left(\left(\sqrt[3]{\cos \left(\frac{\phi_2 + \phi_1}{2}\right)} \cdot \sqrt[3]{\cos \left(\frac{\phi_2 + \phi_1}{2}\right)}\right) \cdot \sqrt[3]{\left(\sqrt[3]{\cos \left(\frac{\phi_2 + \phi_1}{2}\right)} \cdot \sqrt[3]{\cos \left(\frac{\phi_2 + \phi_1}{2}\right)}\right) \cdot \sqrt[3]{\cos \left(\frac{\phi_2 + \phi_1}{2}\right)}}\right)\right) \cdot \left(\cos \left(\frac{\phi_2 + \phi_1}{2}\right) \cdot \left(\lambda_1 - \lambda_2\right)\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 r9660584 = R;
double r9660585 = lambda1;
double r9660586 = lambda2;
double r9660587 = r9660585 - r9660586;
double r9660588 = phi1;
double r9660589 = phi2;
double r9660590 = r9660588 + r9660589;
double r9660591 = 2.0;
double r9660592 = r9660590 / r9660591;
double r9660593 = cos(r9660592);
double r9660594 = r9660587 * r9660593;
double r9660595 = r9660594 * r9660594;
double r9660596 = r9660588 - r9660589;
double r9660597 = r9660596 * r9660596;
double r9660598 = r9660595 + r9660597;
double r9660599 = sqrt(r9660598);
double r9660600 = r9660584 * r9660599;
return r9660600;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r9660601 = phi2;
double r9660602 = 7.191645331488462e+104;
bool r9660603 = r9660601 <= r9660602;
double r9660604 = R;
double r9660605 = phi1;
double r9660606 = r9660605 - r9660601;
double r9660607 = r9660606 * r9660606;
double r9660608 = lambda1;
double r9660609 = lambda2;
double r9660610 = r9660608 - r9660609;
double r9660611 = r9660601 + r9660605;
double r9660612 = 2.0;
double r9660613 = r9660611 / r9660612;
double r9660614 = cos(r9660613);
double r9660615 = cbrt(r9660614);
double r9660616 = r9660615 * r9660615;
double r9660617 = r9660616 * r9660615;
double r9660618 = cbrt(r9660617);
double r9660619 = r9660616 * r9660618;
double r9660620 = r9660610 * r9660619;
double r9660621 = r9660614 * r9660610;
double r9660622 = r9660620 * r9660621;
double r9660623 = r9660607 + r9660622;
double r9660624 = sqrt(r9660623);
double r9660625 = r9660604 * r9660624;
double r9660626 = r9660601 - r9660605;
double r9660627 = r9660604 * r9660626;
double r9660628 = r9660603 ? r9660625 : r9660627;
return r9660628;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
if phi2 < 7.191645331488462e+104Initial program 34.7
rmApplied add-cube-cbrt34.7
rmApplied add-cube-cbrt34.7
if 7.191645331488462e+104 < phi2 Initial program 52.6
rmApplied add-cube-cbrt52.6
Taylor expanded around 0 17.6
Final simplification32.2
herbie shell --seed 2019142
(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))))))