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}\;\phi_2 \le 9.37999987073613691256390226753120036995 \cdot 10^{53}:\\
\;\;\;\;R \cdot \sqrt{\left(\lambda_1 - \lambda_2\right) \cdot \left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \left(\cos \left(\frac{\phi_1 + \phi_2}{2}\right) \cdot \left(\lambda_1 - \lambda_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 r12006695 = R;
double r12006696 = lambda1;
double r12006697 = lambda2;
double r12006698 = r12006696 - r12006697;
double r12006699 = phi1;
double r12006700 = phi2;
double r12006701 = r12006699 + r12006700;
double r12006702 = 2.0;
double r12006703 = r12006701 / r12006702;
double r12006704 = cos(r12006703);
double r12006705 = r12006698 * r12006704;
double r12006706 = r12006705 * r12006705;
double r12006707 = r12006699 - r12006700;
double r12006708 = r12006707 * r12006707;
double r12006709 = r12006706 + r12006708;
double r12006710 = sqrt(r12006709);
double r12006711 = r12006695 * r12006710;
return r12006711;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r12006712 = phi2;
double r12006713 = 9.379999870736137e+53;
bool r12006714 = r12006712 <= r12006713;
double r12006715 = R;
double r12006716 = lambda1;
double r12006717 = lambda2;
double r12006718 = r12006716 - r12006717;
double r12006719 = phi1;
double r12006720 = r12006719 + r12006712;
double r12006721 = 2.0;
double r12006722 = r12006720 / r12006721;
double r12006723 = cos(r12006722);
double r12006724 = r12006723 * r12006718;
double r12006725 = r12006723 * r12006724;
double r12006726 = r12006718 * r12006725;
double r12006727 = r12006719 - r12006712;
double r12006728 = r12006727 * r12006727;
double r12006729 = r12006726 + r12006728;
double r12006730 = sqrt(r12006729);
double r12006731 = r12006715 * r12006730;
double r12006732 = r12006712 - r12006719;
double r12006733 = r12006715 * r12006732;
double r12006734 = r12006714 ? r12006731 : r12006733;
return r12006734;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
if phi2 < 9.379999870736137e+53Initial program 36.7
rmApplied associate-*l*36.7
if 9.379999870736137e+53 < phi2 Initial program 50.3
Taylor expanded around 0 24.2
Final simplification34.4
herbie shell --seed 2019200
(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))))))