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 r5814735 = R;
double r5814736 = lambda1;
double r5814737 = lambda2;
double r5814738 = r5814736 - r5814737;
double r5814739 = phi1;
double r5814740 = phi2;
double r5814741 = r5814739 + r5814740;
double r5814742 = 2.0;
double r5814743 = r5814741 / r5814742;
double r5814744 = cos(r5814743);
double r5814745 = r5814738 * r5814744;
double r5814746 = r5814745 * r5814745;
double r5814747 = r5814739 - r5814740;
double r5814748 = r5814747 * r5814747;
double r5814749 = r5814746 + r5814748;
double r5814750 = sqrt(r5814749);
double r5814751 = r5814735 * r5814750;
return r5814751;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r5814752 = phi1;
double r5814753 = phi2;
double r5814754 = r5814752 - r5814753;
double r5814755 = r5814754 * r5814754;
double r5814756 = lambda1;
double r5814757 = lambda2;
double r5814758 = r5814756 - r5814757;
double r5814759 = r5814752 + r5814753;
double r5814760 = 2.0;
double r5814761 = r5814759 / r5814760;
double r5814762 = cos(r5814761);
double r5814763 = r5814758 * r5814762;
double r5814764 = r5814763 * r5814763;
double r5814765 = r5814755 + r5814764;
double r5814766 = 3.2379687723285626e+298;
bool r5814767 = r5814765 <= r5814766;
double r5814768 = R;
double r5814769 = r5814762 * r5814762;
double r5814770 = r5814762 * r5814769;
double r5814771 = cbrt(r5814770);
double r5814772 = r5814771 * r5814758;
double r5814773 = r5814772 * r5814763;
double r5814774 = r5814773 + r5814755;
double r5814775 = sqrt(r5814774);
double r5814776 = r5814768 * r5814775;
double r5814777 = r5814753 - r5814752;
double r5814778 = r5814777 * r5814768;
double r5814779 = r5814767 ? r5814776 : r5814778;
return r5814779;
}



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