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(\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) \le 6.466406828195175629982671451676570961003 \cdot 10^{303}:\\
\;\;\;\;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(\phi_2 - \phi_1\right)\\
\end{array}double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r85498 = R;
double r85499 = lambda1;
double r85500 = lambda2;
double r85501 = r85499 - r85500;
double r85502 = phi1;
double r85503 = phi2;
double r85504 = r85502 + r85503;
double r85505 = 2.0;
double r85506 = r85504 / r85505;
double r85507 = cos(r85506);
double r85508 = r85501 * r85507;
double r85509 = r85508 * r85508;
double r85510 = r85502 - r85503;
double r85511 = r85510 * r85510;
double r85512 = r85509 + r85511;
double r85513 = sqrt(r85512);
double r85514 = r85498 * r85513;
return r85514;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r85515 = lambda1;
double r85516 = lambda2;
double r85517 = r85515 - r85516;
double r85518 = phi1;
double r85519 = phi2;
double r85520 = r85518 + r85519;
double r85521 = 2.0;
double r85522 = r85520 / r85521;
double r85523 = cos(r85522);
double r85524 = r85517 * r85523;
double r85525 = r85524 * r85524;
double r85526 = r85518 - r85519;
double r85527 = r85526 * r85526;
double r85528 = r85525 + r85527;
double r85529 = 6.466406828195176e+303;
bool r85530 = r85528 <= r85529;
double r85531 = R;
double r85532 = r85523 * r85524;
double r85533 = r85517 * r85532;
double r85534 = r85533 + r85527;
double r85535 = sqrt(r85534);
double r85536 = r85531 * r85535;
double r85537 = r85519 - r85518;
double r85538 = r85531 * r85537;
double r85539 = r85530 ? r85536 : r85538;
return r85539;
}



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.0))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0)))) (* (- phi1 phi2) (- phi1 phi2))) < 6.466406828195176e+303Initial program 1.8
rmApplied associate-*l*1.8
if 6.466406828195176e+303 < (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0)))) (* (- phi1 phi2) (- phi1 phi2))) Initial program 63.5
Taylor expanded around 0 47.1
Final simplification29.0
herbie shell --seed 2019326
(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))))))