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 7.810721827696256 \cdot 10^{+306}:\\
\;\;\;\;R \cdot \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)}\\
\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 r47141347 = R;
double r47141348 = lambda1;
double r47141349 = lambda2;
double r47141350 = r47141348 - r47141349;
double r47141351 = phi1;
double r47141352 = phi2;
double r47141353 = r47141351 + r47141352;
double r47141354 = 2.0;
double r47141355 = r47141353 / r47141354;
double r47141356 = cos(r47141355);
double r47141357 = r47141350 * r47141356;
double r47141358 = r47141357 * r47141357;
double r47141359 = r47141351 - r47141352;
double r47141360 = r47141359 * r47141359;
double r47141361 = r47141358 + r47141360;
double r47141362 = sqrt(r47141361);
double r47141363 = r47141347 * r47141362;
return r47141363;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r47141364 = phi1;
double r47141365 = phi2;
double r47141366 = r47141364 - r47141365;
double r47141367 = r47141366 * r47141366;
double r47141368 = lambda1;
double r47141369 = lambda2;
double r47141370 = r47141368 - r47141369;
double r47141371 = r47141364 + r47141365;
double r47141372 = 2.0;
double r47141373 = r47141371 / r47141372;
double r47141374 = cos(r47141373);
double r47141375 = r47141370 * r47141374;
double r47141376 = r47141375 * r47141375;
double r47141377 = r47141367 + r47141376;
double r47141378 = 7.810721827696256e+306;
bool r47141379 = r47141377 <= r47141378;
double r47141380 = R;
double r47141381 = sqrt(r47141377);
double r47141382 = r47141380 * r47141381;
double r47141383 = r47141365 - r47141364;
double r47141384 = r47141380 * r47141383;
double r47141385 = r47141379 ? r47141382 : r47141384;
return r47141385;
}



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))) < 7.810721827696256e+306Initial program 1.8
if 7.810721827696256e+306 < (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))) Initial program 60.5
Taylor expanded around 0 47.1
Final simplification29.2
herbie shell --seed 2019121
(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))))))