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(\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) \le 8.229130322930406577428232878090474495932 \cdot 10^{303}:\\
\;\;\;\;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)}\\
\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 r6859600 = R;
double r6859601 = lambda1;
double r6859602 = lambda2;
double r6859603 = r6859601 - r6859602;
double r6859604 = phi1;
double r6859605 = phi2;
double r6859606 = r6859604 + r6859605;
double r6859607 = 2.0;
double r6859608 = r6859606 / r6859607;
double r6859609 = cos(r6859608);
double r6859610 = r6859603 * r6859609;
double r6859611 = r6859610 * r6859610;
double r6859612 = r6859604 - r6859605;
double r6859613 = r6859612 * r6859612;
double r6859614 = r6859611 + r6859613;
double r6859615 = sqrt(r6859614);
double r6859616 = r6859600 * r6859615;
return r6859616;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r6859617 = lambda1;
double r6859618 = lambda2;
double r6859619 = r6859617 - r6859618;
double r6859620 = phi1;
double r6859621 = phi2;
double r6859622 = r6859620 + r6859621;
double r6859623 = 2.0;
double r6859624 = r6859622 / r6859623;
double r6859625 = cos(r6859624);
double r6859626 = r6859619 * r6859625;
double r6859627 = r6859626 * r6859626;
double r6859628 = r6859620 - r6859621;
double r6859629 = r6859628 * r6859628;
double r6859630 = r6859627 + r6859629;
double r6859631 = 8.229130322930407e+303;
bool r6859632 = r6859630 <= r6859631;
double r6859633 = R;
double r6859634 = sqrt(r6859630);
double r6859635 = r6859633 * r6859634;
double r6859636 = r6859621 - r6859620;
double r6859637 = r6859633 * r6859636;
double r6859638 = r6859632 ? r6859635 : r6859637;
return r6859638;
}



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.0))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0)))) (* (- phi1 phi2) (- phi1 phi2))) < 8.229130322930407e+303Initial program 2.0
if 8.229130322930407e+303 < (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0)))) (* (- phi1 phi2) (- phi1 phi2))) Initial program 63.4
Taylor expanded around 0 46.8
Final simplification29.7
herbie shell --seed 2019174
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Equirectangular approximation to distance on a great circle"
(* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0)))) (* (- phi1 phi2) (- phi1 phi2))))))