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 6.836337397461439 \cdot 10^{+307}:\\
\;\;\;\;R \cdot \left(\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)}} \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}:\\
\;\;\;\;R \cdot \left(\phi_2 - \phi_1\right)\\
\end{array}double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r3731249 = R;
double r3731250 = lambda1;
double r3731251 = lambda2;
double r3731252 = r3731250 - r3731251;
double r3731253 = phi1;
double r3731254 = phi2;
double r3731255 = r3731253 + r3731254;
double r3731256 = 2.0;
double r3731257 = r3731255 / r3731256;
double r3731258 = cos(r3731257);
double r3731259 = r3731252 * r3731258;
double r3731260 = r3731259 * r3731259;
double r3731261 = r3731253 - r3731254;
double r3731262 = r3731261 * r3731261;
double r3731263 = r3731260 + r3731262;
double r3731264 = sqrt(r3731263);
double r3731265 = r3731249 * r3731264;
return r3731265;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r3731266 = phi1;
double r3731267 = phi2;
double r3731268 = r3731266 - r3731267;
double r3731269 = r3731268 * r3731268;
double r3731270 = lambda1;
double r3731271 = lambda2;
double r3731272 = r3731270 - r3731271;
double r3731273 = r3731266 + r3731267;
double r3731274 = 2.0;
double r3731275 = r3731273 / r3731274;
double r3731276 = cos(r3731275);
double r3731277 = r3731272 * r3731276;
double r3731278 = r3731277 * r3731277;
double r3731279 = r3731269 + r3731278;
double r3731280 = 6.836337397461439e+307;
bool r3731281 = r3731279 <= r3731280;
double r3731282 = R;
double r3731283 = sqrt(r3731279);
double r3731284 = sqrt(r3731283);
double r3731285 = r3731284 * r3731284;
double r3731286 = r3731282 * r3731285;
double r3731287 = r3731267 - r3731266;
double r3731288 = r3731282 * r3731287;
double r3731289 = r3731281 ? r3731286 : r3731288;
return r3731289;
}



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))) < 6.836337397461439e+307Initial program 1.6
rmApplied add-sqr-sqrt1.6
Applied sqrt-prod2.0
if 6.836337397461439e+307 < (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))) Initial program 60.7
rmApplied insert-posit1660.7
rmApplied insert-posit1660.7
Taylor expanded around 0 46.8
Final simplification29.2
herbie shell --seed 2019144
(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))))))