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 4.59637543061495 \cdot 10^{+302}:\\
\;\;\;\;R \cdot \sqrt{\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)}\\
\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 r15503667 = R;
double r15503668 = lambda1;
double r15503669 = lambda2;
double r15503670 = r15503668 - r15503669;
double r15503671 = phi1;
double r15503672 = phi2;
double r15503673 = r15503671 + r15503672;
double r15503674 = 2.0;
double r15503675 = r15503673 / r15503674;
double r15503676 = cos(r15503675);
double r15503677 = r15503670 * r15503676;
double r15503678 = r15503677 * r15503677;
double r15503679 = r15503671 - r15503672;
double r15503680 = r15503679 * r15503679;
double r15503681 = r15503678 + r15503680;
double r15503682 = sqrt(r15503681);
double r15503683 = r15503667 * r15503682;
return r15503683;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r15503684 = phi1;
double r15503685 = phi2;
double r15503686 = r15503684 - r15503685;
double r15503687 = r15503686 * r15503686;
double r15503688 = lambda1;
double r15503689 = lambda2;
double r15503690 = r15503688 - r15503689;
double r15503691 = r15503684 + r15503685;
double r15503692 = 2.0;
double r15503693 = r15503691 / r15503692;
double r15503694 = cos(r15503693);
double r15503695 = r15503690 * r15503694;
double r15503696 = r15503695 * r15503695;
double r15503697 = r15503687 + r15503696;
double r15503698 = 4.59637543061495e+302;
bool r15503699 = r15503697 <= r15503698;
double r15503700 = R;
double r15503701 = sqrt(r15503697);
double r15503702 = r15503700 * r15503701;
double r15503703 = r15503685 - r15503684;
double r15503704 = r15503700 * r15503703;
double r15503705 = r15503699 ? r15503702 : r15503704;
return r15503705;
}



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))) < 4.59637543061495e+302Initial program 1.5
if 4.59637543061495e+302 < (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))) Initial program 60.0
Taylor expanded around 0 47.4
Final simplification29.0
herbie shell --seed 2019162
(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))))))