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}\;\lambda_2 \le -2.6219847008147082 \cdot 10^{208}:\\
\;\;\;\;R \cdot \left(-\left(\frac{\phi_2 \cdot \left(\lambda_2 \cdot \phi_1\right)}{\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right) \cdot {\lambda_1}^{2}} + \left(\frac{\phi_2 \cdot \phi_1}{\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right) \cdot \lambda_1} + \lambda_2 \cdot \cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right)\right)\right)\right)\\
\mathbf{elif}\;\lambda_2 \le -5.5068609279832755 \cdot 10^{47}:\\
\;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\
\mathbf{elif}\;\lambda_2 \le -343.899314599184834:\\
\;\;\;\;R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \left(\cos \left(\frac{\phi_1 + \phi_2}{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{elif}\;\lambda_2 \le -1.39901496078204538 \cdot 10^{-33}:\\
\;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\
\mathbf{elif}\;\lambda_2 \le 1.1505150553105537 \cdot 10^{-291}:\\
\;\;\;\;R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \frac{\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \left(\left(\lambda_1 \cdot \lambda_1 - \lambda_2 \cdot \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right)}{\lambda_1 + \lambda_2} + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\\
\mathbf{elif}\;\lambda_2 \le 3.62734158549870918 \cdot 10^{-162}:\\
\;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\
\mathbf{elif}\;\lambda_2 \le 2.7202990652582576 \cdot 10^{32}:\\
\;\;\;\;R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \left(\cos \left(\frac{\phi_1 + \phi_2}{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{elif}\;\lambda_2 \le 1.8914867016819411 \cdot 10^{68}:\\
\;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\
\mathbf{elif}\;\lambda_2 \le 2.83361654007986611 \cdot 10^{153}:\\
\;\;\;\;R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \left(\cos \left(\frac{\phi_1 + \phi_2}{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}:\\
\;\;\;\;R \cdot \left(\frac{\phi_2 \cdot \left(\lambda_2 \cdot \phi_1\right)}{\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right) \cdot {\lambda_1}^{2}} + \left(\frac{\phi_2 \cdot \phi_1}{\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right) \cdot \lambda_1} + \lambda_2 \cdot \cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right)\right)\right)\\
\end{array}double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r392858 = R;
double r392859 = lambda1;
double r392860 = lambda2;
double r392861 = r392859 - r392860;
double r392862 = phi1;
double r392863 = phi2;
double r392864 = r392862 + r392863;
double r392865 = 2.0;
double r392866 = r392864 / r392865;
double r392867 = cos(r392866);
double r392868 = r392861 * r392867;
double r392869 = r392868 * r392868;
double r392870 = r392862 - r392863;
double r392871 = r392870 * r392870;
double r392872 = r392869 + r392871;
double r392873 = sqrt(r392872);
double r392874 = r392858 * r392873;
return r392874;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r392875 = lambda2;
double r392876 = -2.621984700814708e+208;
bool r392877 = r392875 <= r392876;
double r392878 = R;
double r392879 = phi2;
double r392880 = phi1;
double r392881 = r392875 * r392880;
double r392882 = r392879 * r392881;
double r392883 = 0.5;
double r392884 = r392879 + r392880;
double r392885 = r392883 * r392884;
double r392886 = cos(r392885);
double r392887 = lambda1;
double r392888 = 2.0;
double r392889 = pow(r392887, r392888);
double r392890 = r392886 * r392889;
double r392891 = r392882 / r392890;
double r392892 = r392879 * r392880;
double r392893 = r392886 * r392887;
double r392894 = r392892 / r392893;
double r392895 = r392875 * r392886;
double r392896 = r392894 + r392895;
double r392897 = r392891 + r392896;
double r392898 = -r392897;
double r392899 = r392878 * r392898;
double r392900 = -5.5068609279832755e+47;
bool r392901 = r392875 <= r392900;
double r392902 = r392879 - r392880;
double r392903 = r392878 * r392902;
double r392904 = -343.89931459918483;
bool r392905 = r392875 <= r392904;
double r392906 = r392887 - r392875;
double r392907 = r392880 + r392879;
double r392908 = 2.0;
double r392909 = r392907 / r392908;
double r392910 = cos(r392909);
double r392911 = r392906 * r392910;
double r392912 = r392910 * r392911;
double r392913 = r392906 * r392912;
double r392914 = r392880 - r392879;
double r392915 = r392914 * r392914;
double r392916 = r392913 + r392915;
double r392917 = sqrt(r392916);
double r392918 = r392878 * r392917;
double r392919 = -1.3990149607820454e-33;
bool r392920 = r392875 <= r392919;
double r392921 = 1.1505150553105537e-291;
bool r392922 = r392875 <= r392921;
double r392923 = r392887 * r392887;
double r392924 = r392875 * r392875;
double r392925 = r392923 - r392924;
double r392926 = r392925 * r392910;
double r392927 = r392910 * r392926;
double r392928 = r392887 + r392875;
double r392929 = r392927 / r392928;
double r392930 = r392906 * r392929;
double r392931 = r392930 + r392915;
double r392932 = sqrt(r392931);
double r392933 = r392878 * r392932;
double r392934 = 3.627341585498709e-162;
bool r392935 = r392875 <= r392934;
double r392936 = 2.7202990652582576e+32;
bool r392937 = r392875 <= r392936;
double r392938 = 1.891486701681941e+68;
bool r392939 = r392875 <= r392938;
double r392940 = 2.833616540079866e+153;
bool r392941 = r392875 <= r392940;
double r392942 = r392878 * r392897;
double r392943 = r392941 ? r392918 : r392942;
double r392944 = r392939 ? r392903 : r392943;
double r392945 = r392937 ? r392918 : r392944;
double r392946 = r392935 ? r392903 : r392945;
double r392947 = r392922 ? r392933 : r392946;
double r392948 = r392920 ? r392903 : r392947;
double r392949 = r392905 ? r392918 : r392948;
double r392950 = r392901 ? r392903 : r392949;
double r392951 = r392877 ? r392899 : r392950;
return r392951;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
if lambda2 < -2.621984700814708e+208Initial program 64.0
Taylor expanded around inf 50.0
if -2.621984700814708e+208 < lambda2 < -5.5068609279832755e+47 or -343.89931459918483 < lambda2 < -1.3990149607820454e-33 or 1.1505150553105537e-291 < lambda2 < 3.627341585498709e-162 or 2.7202990652582576e+32 < lambda2 < 1.891486701681941e+68Initial program 38.1
Taylor expanded around 0 44.7
if -5.5068609279832755e+47 < lambda2 < -343.89931459918483 or 3.627341585498709e-162 < lambda2 < 2.7202990652582576e+32 or 1.891486701681941e+68 < lambda2 < 2.833616540079866e+153Initial program 31.6
rmApplied associate-*l*31.6
if -1.3990149607820454e-33 < lambda2 < 1.1505150553105537e-291Initial program 31.4
rmApplied associate-*l*31.4
rmApplied flip--31.4
Applied associate-*l/31.4
Applied associate-*r/31.4
if 2.833616540079866e+153 < lambda2 Initial program 63.8
Taylor expanded around -inf 52.6
Final simplification39.0
herbie shell --seed 2020060
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Equirectangular approximation to distance on a great circle"
:precision binary64
(* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))))