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 1.4265770542487335 \cdot 10^{+301}:\\
\;\;\;\;R \cdot \left(\sqrt{\sqrt{\left(\left(\lambda_1 - \lambda_2\right) \cdot \left(\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)} \cdot \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)\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)}} \cdot \sqrt{\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)}}\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 r72673693 = R;
double r72673694 = lambda1;
double r72673695 = lambda2;
double r72673696 = r72673694 - r72673695;
double r72673697 = phi1;
double r72673698 = phi2;
double r72673699 = r72673697 + r72673698;
double r72673700 = 2.0;
double r72673701 = r72673699 / r72673700;
double r72673702 = cos(r72673701);
double r72673703 = r72673696 * r72673702;
double r72673704 = r72673703 * r72673703;
double r72673705 = r72673697 - r72673698;
double r72673706 = r72673705 * r72673705;
double r72673707 = r72673704 + r72673706;
double r72673708 = sqrt(r72673707);
double r72673709 = r72673693 * r72673708;
return r72673709;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r72673710 = phi1;
double r72673711 = phi2;
double r72673712 = r72673710 - r72673711;
double r72673713 = r72673712 * r72673712;
double r72673714 = lambda1;
double r72673715 = lambda2;
double r72673716 = r72673714 - r72673715;
double r72673717 = r72673710 + r72673711;
double r72673718 = 2.0;
double r72673719 = r72673717 / r72673718;
double r72673720 = cos(r72673719);
double r72673721 = r72673716 * r72673720;
double r72673722 = r72673721 * r72673721;
double r72673723 = r72673713 + r72673722;
double r72673724 = 1.4265770542487335e+301;
bool r72673725 = r72673723 <= r72673724;
double r72673726 = R;
double r72673727 = cbrt(r72673720);
double r72673728 = r72673727 * r72673727;
double r72673729 = r72673727 * r72673728;
double r72673730 = r72673716 * r72673729;
double r72673731 = r72673730 * r72673721;
double r72673732 = r72673731 + r72673713;
double r72673733 = sqrt(r72673732);
double r72673734 = sqrt(r72673733);
double r72673735 = sqrt(r72673723);
double r72673736 = sqrt(r72673735);
double r72673737 = r72673734 * r72673736;
double r72673738 = r72673726 * r72673737;
double r72673739 = r72673711 - r72673710;
double r72673740 = r72673739 * r72673726;
double r72673741 = r72673725 ? r72673738 : r72673740;
return r72673741;
}



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))) < 1.4265770542487335e+301Initial program 2.0
rmApplied add-sqr-sqrt2.4
rmApplied add-cube-cbrt2.4
if 1.4265770542487335e+301 < (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))) Initial program 59.8
Taylor expanded around 0 46.7
Final simplification29.2
herbie shell --seed 2019112
(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))))))