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 1.85335802842088590346712744457318896647 \cdot 10^{302}:\\
\;\;\;\;\sqrt{\left(\left(\lambda_1 - \lambda_2\right) \cdot \log \left(e^{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\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)} \cdot R\\
\mathbf{else}:\\
\;\;\;\;\left(\phi_2 - \phi_1\right) \cdot R\\
\end{array}double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r10564464 = R;
double r10564465 = lambda1;
double r10564466 = lambda2;
double r10564467 = r10564465 - r10564466;
double r10564468 = phi1;
double r10564469 = phi2;
double r10564470 = r10564468 + r10564469;
double r10564471 = 2.0;
double r10564472 = r10564470 / r10564471;
double r10564473 = cos(r10564472);
double r10564474 = r10564467 * r10564473;
double r10564475 = r10564474 * r10564474;
double r10564476 = r10564468 - r10564469;
double r10564477 = r10564476 * r10564476;
double r10564478 = r10564475 + r10564477;
double r10564479 = sqrt(r10564478);
double r10564480 = r10564464 * r10564479;
return r10564480;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r10564481 = phi1;
double r10564482 = phi2;
double r10564483 = r10564481 - r10564482;
double r10564484 = r10564483 * r10564483;
double r10564485 = lambda1;
double r10564486 = lambda2;
double r10564487 = r10564485 - r10564486;
double r10564488 = r10564481 + r10564482;
double r10564489 = 2.0;
double r10564490 = r10564488 / r10564489;
double r10564491 = cos(r10564490);
double r10564492 = r10564487 * r10564491;
double r10564493 = r10564492 * r10564492;
double r10564494 = r10564484 + r10564493;
double r10564495 = 1.853358028420886e+302;
bool r10564496 = r10564494 <= r10564495;
double r10564497 = exp(r10564491);
double r10564498 = log(r10564497);
double r10564499 = r10564487 * r10564498;
double r10564500 = r10564499 * r10564492;
double r10564501 = r10564500 + r10564484;
double r10564502 = sqrt(r10564501);
double r10564503 = R;
double r10564504 = r10564502 * r10564503;
double r10564505 = r10564482 - r10564481;
double r10564506 = r10564505 * r10564503;
double r10564507 = r10564496 ? r10564504 : r10564506;
return r10564507;
}



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))) < 1.853358028420886e+302Initial program 2.0
rmApplied add-log-exp2.0
if 1.853358028420886e+302 < (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0)))) (* (- phi1 phi2) (- phi1 phi2))) Initial program 63.1
Taylor expanded around 0 47.0
Final simplification29.6
herbie shell --seed 2019171
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Equirectangular approximation to distance on a great circle"
(* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2.0)))) (* (- phi1 phi2) (- phi1 phi2))))))