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.0597824736442374 \cdot 10^{+302}:\\
\;\;\;\;R \cdot \sqrt{\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \left(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\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 r1938762 = R;
double r1938763 = lambda1;
double r1938764 = lambda2;
double r1938765 = r1938763 - r1938764;
double r1938766 = phi1;
double r1938767 = phi2;
double r1938768 = r1938766 + r1938767;
double r1938769 = 2.0;
double r1938770 = r1938768 / r1938769;
double r1938771 = cos(r1938770);
double r1938772 = r1938765 * r1938771;
double r1938773 = r1938772 * r1938772;
double r1938774 = r1938766 - r1938767;
double r1938775 = r1938774 * r1938774;
double r1938776 = r1938773 + r1938775;
double r1938777 = sqrt(r1938776);
double r1938778 = r1938762 * r1938777;
return r1938778;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r1938779 = phi1;
double r1938780 = phi2;
double r1938781 = r1938779 - r1938780;
double r1938782 = r1938781 * r1938781;
double r1938783 = lambda1;
double r1938784 = lambda2;
double r1938785 = r1938783 - r1938784;
double r1938786 = r1938779 + r1938780;
double r1938787 = 2.0;
double r1938788 = r1938786 / r1938787;
double r1938789 = cos(r1938788);
double r1938790 = r1938785 * r1938789;
double r1938791 = r1938790 * r1938790;
double r1938792 = r1938782 + r1938791;
double r1938793 = 3.0597824736442374e+302;
bool r1938794 = r1938792 <= r1938793;
double r1938795 = R;
double r1938796 = r1938785 * r1938790;
double r1938797 = r1938789 * r1938796;
double r1938798 = r1938797 + r1938782;
double r1938799 = sqrt(r1938798);
double r1938800 = r1938795 * r1938799;
double r1938801 = r1938780 - r1938779;
double r1938802 = r1938801 * r1938795;
double r1938803 = r1938794 ? r1938800 : r1938802;
return r1938803;
}



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.0597824736442374e+302Initial program 1.8
rmApplied associate-*r*1.8
if 3.0597824736442374e+302 < (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))) Initial program 60.1
Taylor expanded around 0 46.5
Final simplification28.9
herbie shell --seed 2019153
(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))))))