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}\;\phi_2 \le -5.617892162166607 \cdot 10^{+147}:\\
\;\;\;\;\left(-R\right) \cdot \left(\frac{\left(\cos \left(\left(\phi_2 + \phi_1\right) \cdot \frac{1}{2}\right) \cdot \cos \left(\left(\phi_2 + \phi_1\right) \cdot \frac{1}{2}\right)\right) \cdot \lambda_2}{\frac{\phi_1}{\lambda_1}} \cdot \frac{\phi_2}{\phi_1} + \left(\frac{\left(\cos \left(\left(\phi_2 + \phi_1\right) \cdot \frac{1}{2}\right) \cdot \cos \left(\left(\phi_2 + \phi_1\right) \cdot \frac{1}{2}\right)\right) \cdot \lambda_2}{\frac{\phi_1}{\lambda_1}} + \phi_2\right)\right)\\
\mathbf{elif}\;\phi_2 \le 2.8688588231103195 \cdot 10^{-32}:\\
\;\;\;\;R \cdot \sqrt{\left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right) + \left(\left(\lambda_1 - 2 \cdot \lambda_2\right) \cdot \lambda_1 + \lambda_2 \cdot \lambda_2\right) \cdot \left(\cos \left(\left(\phi_2 + \phi_1\right) \cdot \frac{1}{2}\right) \cdot \cos \left(\left(\phi_2 + \phi_1\right) \cdot \frac{1}{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 r33214915 = R;
double r33214916 = lambda1;
double r33214917 = lambda2;
double r33214918 = r33214916 - r33214917;
double r33214919 = phi1;
double r33214920 = phi2;
double r33214921 = r33214919 + r33214920;
double r33214922 = 2.0;
double r33214923 = r33214921 / r33214922;
double r33214924 = cos(r33214923);
double r33214925 = r33214918 * r33214924;
double r33214926 = r33214925 * r33214925;
double r33214927 = r33214919 - r33214920;
double r33214928 = r33214927 * r33214927;
double r33214929 = r33214926 + r33214928;
double r33214930 = sqrt(r33214929);
double r33214931 = r33214915 * r33214930;
return r33214931;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r33214932 = phi2;
double r33214933 = -5.617892162166607e+147;
bool r33214934 = r33214932 <= r33214933;
double r33214935 = R;
double r33214936 = -r33214935;
double r33214937 = phi1;
double r33214938 = r33214932 + r33214937;
double r33214939 = 0.5;
double r33214940 = r33214938 * r33214939;
double r33214941 = cos(r33214940);
double r33214942 = r33214941 * r33214941;
double r33214943 = lambda2;
double r33214944 = r33214942 * r33214943;
double r33214945 = lambda1;
double r33214946 = r33214937 / r33214945;
double r33214947 = r33214944 / r33214946;
double r33214948 = r33214932 / r33214937;
double r33214949 = r33214947 * r33214948;
double r33214950 = r33214947 + r33214932;
double r33214951 = r33214949 + r33214950;
double r33214952 = r33214936 * r33214951;
double r33214953 = 2.8688588231103195e-32;
bool r33214954 = r33214932 <= r33214953;
double r33214955 = r33214937 - r33214932;
double r33214956 = r33214955 * r33214955;
double r33214957 = 2.0;
double r33214958 = r33214957 * r33214943;
double r33214959 = r33214945 - r33214958;
double r33214960 = r33214959 * r33214945;
double r33214961 = r33214943 * r33214943;
double r33214962 = r33214960 + r33214961;
double r33214963 = r33214962 * r33214942;
double r33214964 = r33214956 + r33214963;
double r33214965 = sqrt(r33214964);
double r33214966 = r33214935 * r33214965;
double r33214967 = r33214932 - r33214937;
double r33214968 = r33214935 * r33214967;
double r33214969 = r33214954 ? r33214966 : r33214968;
double r33214970 = r33214934 ? r33214952 : r33214969;
return r33214970;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
if phi2 < -5.617892162166607e+147Initial program 59.6
Taylor expanded around inf 59.6
Simplified59.6
Taylor expanded around inf 44.7
Simplified40.6
if -5.617892162166607e+147 < phi2 < 2.8688588231103195e-32Initial program 30.8
Taylor expanded around inf 30.9
Simplified30.9
if 2.8688588231103195e-32 < phi2 Initial program 44.0
rmApplied insert-posit1646.1
Taylor expanded around 0 28.6
Final simplification31.4
herbie shell --seed 2019119
(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))))))