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}\;\lambda_1 - \lambda_2 \le -2.44512800894886 \cdot 10^{146}:\\
\;\;\;\;R \cdot \left(\lambda_2 - \lambda_1\right)\\
\mathbf{elif}\;\lambda_1 - \lambda_2 \le 9.2572239940457903 \cdot 10^{150}:\\
\;\;\;\;R \cdot \sqrt{\left({\lambda_1}^{2} \cdot \left({\left(\sin \left(0.5 \cdot \phi_2\right)\right)}^{2} \cdot {\left(\sin \left(0.5 \cdot \phi_1\right)\right)}^{2} + {\left(\cos \left(0.5 \cdot \phi_1\right)\right)}^{2} \cdot {\left(\cos \left(0.5 \cdot \phi_2\right)\right)}^{2}\right) + \left({\lambda_2}^{2} \cdot {\left(\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right)\right)}^{2} - 2 \cdot \left(\cos \left(0.5 \cdot \phi_1\right) \cdot \left(\sin \left(0.5 \cdot \phi_1\right) \cdot \left(\cos \left(0.5 \cdot \phi_2\right) \cdot \left(\sin \left(0.5 \cdot \phi_2\right) \cdot {\lambda_1}^{2}\right)\right)\right) + \lambda_2 \cdot \left({\left(\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right)\right)}^{2} \cdot \lambda_1\right)\right)\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)}\\
\mathbf{else}:\\
\;\;\;\;R \cdot \left(\lambda_1 - \lambda_2\right)\\
\end{array}double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r91536 = R;
double r91537 = lambda1;
double r91538 = lambda2;
double r91539 = r91537 - r91538;
double r91540 = phi1;
double r91541 = phi2;
double r91542 = r91540 + r91541;
double r91543 = 2.0;
double r91544 = r91542 / r91543;
double r91545 = cos(r91544);
double r91546 = r91539 * r91545;
double r91547 = r91546 * r91546;
double r91548 = r91540 - r91541;
double r91549 = r91548 * r91548;
double r91550 = r91547 + r91549;
double r91551 = sqrt(r91550);
double r91552 = r91536 * r91551;
return r91552;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r91553 = lambda1;
double r91554 = lambda2;
double r91555 = r91553 - r91554;
double r91556 = -2.44512800894886e+146;
bool r91557 = r91555 <= r91556;
double r91558 = R;
double r91559 = r91554 - r91553;
double r91560 = r91558 * r91559;
double r91561 = 9.25722399404579e+150;
bool r91562 = r91555 <= r91561;
double r91563 = 2.0;
double r91564 = pow(r91553, r91563);
double r91565 = 0.5;
double r91566 = phi2;
double r91567 = r91565 * r91566;
double r91568 = sin(r91567);
double r91569 = pow(r91568, r91563);
double r91570 = phi1;
double r91571 = r91565 * r91570;
double r91572 = sin(r91571);
double r91573 = pow(r91572, r91563);
double r91574 = r91569 * r91573;
double r91575 = cos(r91571);
double r91576 = pow(r91575, r91563);
double r91577 = cos(r91567);
double r91578 = pow(r91577, r91563);
double r91579 = r91576 * r91578;
double r91580 = r91574 + r91579;
double r91581 = r91564 * r91580;
double r91582 = pow(r91554, r91563);
double r91583 = r91566 + r91570;
double r91584 = r91565 * r91583;
double r91585 = cos(r91584);
double r91586 = pow(r91585, r91563);
double r91587 = r91582 * r91586;
double r91588 = r91568 * r91564;
double r91589 = r91577 * r91588;
double r91590 = r91572 * r91589;
double r91591 = r91575 * r91590;
double r91592 = r91586 * r91553;
double r91593 = r91554 * r91592;
double r91594 = r91591 + r91593;
double r91595 = r91563 * r91594;
double r91596 = r91587 - r91595;
double r91597 = r91581 + r91596;
double r91598 = r91570 - r91566;
double r91599 = r91598 * r91598;
double r91600 = r91597 + r91599;
double r91601 = sqrt(r91600);
double r91602 = r91558 * r91601;
double r91603 = r91558 * r91555;
double r91604 = r91562 ? r91602 : r91603;
double r91605 = r91557 ? r91560 : r91604;
return r91605;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
if (- lambda1 lambda2) < -2.44512800894886e+146Initial program 62.1
Taylor expanded around inf 62.1
rmApplied distribute-lft-in62.1
Applied cos-sum62.0
Taylor expanded around inf 62.0
Simplified62.0
Taylor expanded around 0 40.4
if -2.44512800894886e+146 < (- lambda1 lambda2) < 9.25722399404579e+150Initial program 23.5
Taylor expanded around inf 23.5
rmApplied distribute-lft-in23.5
Applied cos-sum23.1
Taylor expanded around inf 23.1
Simplified23.1
if 9.25722399404579e+150 < (- lambda1 lambda2) Initial program 63.3
Taylor expanded around inf 63.3
Taylor expanded around 0 38.1
Final simplification29.5
herbie shell --seed 2019199
(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))))))