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.16050575676768281 \cdot 10^{135} \lor \neg \left(\phi_2 \le 1.7815555754871838 \cdot 10^{53}\right):\\
\;\;\;\;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 r61759 = R;
double r61760 = lambda1;
double r61761 = lambda2;
double r61762 = r61760 - r61761;
double r61763 = phi1;
double r61764 = phi2;
double r61765 = r61763 + r61764;
double r61766 = 2.0;
double r61767 = r61765 / r61766;
double r61768 = cos(r61767);
double r61769 = r61762 * r61768;
double r61770 = r61769 * r61769;
double r61771 = r61763 - r61764;
double r61772 = r61771 * r61771;
double r61773 = r61770 + r61772;
double r61774 = sqrt(r61773);
double r61775 = r61759 * r61774;
return r61775;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r61776 = phi2;
double r61777 = -2.1605057567676828e+135;
bool r61778 = r61776 <= r61777;
double r61779 = 1.7815555754871838e+53;
bool r61780 = r61776 <= r61779;
double r61781 = !r61780;
bool r61782 = r61778 || r61781;
double r61783 = R;
double r61784 = phi1;
double r61785 = r61776 - r61784;
double r61786 = r61783 * r61785;
double r61787 = lambda1;
double r61788 = lambda2;
double r61789 = r61787 - r61788;
double r61790 = r61784 + r61776;
double r61791 = 2.0;
double r61792 = r61790 / r61791;
double r61793 = cos(r61792);
double r61794 = r61789 * r61793;
double r61795 = cbrt(r61793);
double r61796 = r61795 * r61795;
double r61797 = r61796 * r61795;
double r61798 = r61789 * r61797;
double r61799 = r61794 * r61798;
double r61800 = r61784 - r61776;
double r61801 = r61800 * r61800;
double r61802 = r61799 + r61801;
double r61803 = sqrt(r61802);
double r61804 = r61783 * r61803;
double r61805 = r61782 ? r61786 : r61804;
return r61805;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
if phi2 < -2.1605057567676828e+135 or 1.7815555754871838e+53 < phi2 Initial program 54.0
Taylor expanded around 0 37.3
if -2.1605057567676828e+135 < phi2 < 1.7815555754871838e+53Initial program 31.9
rmApplied add-cube-cbrt32.0
Final simplification33.6
herbie shell --seed 2020003
(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))))))