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 -5.485072116683906760810748866048419583343 \cdot 10^{154}:\\
\;\;\;\;R \cdot \frac{\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right)}{\frac{-1}{\lambda_1}}\\
\mathbf{elif}\;\lambda_1 - \lambda_2 \le 1.015908151149958197110468381283702293902 \cdot 10^{149}:\\
\;\;\;\;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)}\\
\mathbf{else}:\\
\;\;\;\;R \cdot \frac{\cos \left(0.5 \cdot \left(\phi_2 + \phi_1\right)\right)}{\frac{1}{\lambda_1}}\\
\end{array}double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r71601 = R;
double r71602 = lambda1;
double r71603 = lambda2;
double r71604 = r71602 - r71603;
double r71605 = phi1;
double r71606 = phi2;
double r71607 = r71605 + r71606;
double r71608 = 2.0;
double r71609 = r71607 / r71608;
double r71610 = cos(r71609);
double r71611 = r71604 * r71610;
double r71612 = r71611 * r71611;
double r71613 = r71605 - r71606;
double r71614 = r71613 * r71613;
double r71615 = r71612 + r71614;
double r71616 = sqrt(r71615);
double r71617 = r71601 * r71616;
return r71617;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r71618 = lambda1;
double r71619 = lambda2;
double r71620 = r71618 - r71619;
double r71621 = -5.485072116683907e+154;
bool r71622 = r71620 <= r71621;
double r71623 = R;
double r71624 = 0.5;
double r71625 = phi2;
double r71626 = phi1;
double r71627 = r71625 + r71626;
double r71628 = r71624 * r71627;
double r71629 = cos(r71628);
double r71630 = -1.0;
double r71631 = r71630 / r71618;
double r71632 = r71629 / r71631;
double r71633 = r71623 * r71632;
double r71634 = 1.0159081511499582e+149;
bool r71635 = r71620 <= r71634;
double r71636 = r71626 + r71625;
double r71637 = 2.0;
double r71638 = r71636 / r71637;
double r71639 = cos(r71638);
double r71640 = r71620 * r71639;
double r71641 = r71640 * r71640;
double r71642 = r71626 - r71625;
double r71643 = r71642 * r71642;
double r71644 = r71641 + r71643;
double r71645 = sqrt(r71644);
double r71646 = r71623 * r71645;
double r71647 = 1.0;
double r71648 = r71647 / r71618;
double r71649 = r71629 / r71648;
double r71650 = r71623 * r71649;
double r71651 = r71635 ? r71646 : r71650;
double r71652 = r71622 ? r71633 : r71651;
return r71652;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
if (- lambda1 lambda2) < -5.485072116683907e+154Initial program 64.0
rmApplied add-exp-log64.0
rmApplied pow164.0
Applied log-pow64.0
Applied exp-prod64.0
Simplified64.0
Taylor expanded around -inf 49.7
Simplified47.7
if -5.485072116683907e+154 < (- lambda1 lambda2) < 1.0159081511499582e+149Initial program 23.0
if 1.0159081511499582e+149 < (- lambda1 lambda2) Initial program 63.1
rmApplied add-exp-log63.2
rmApplied pow163.2
Applied log-pow63.2
Applied exp-prod63.2
Simplified63.2
Taylor expanded around inf 50.6
Simplified48.5
Final simplification32.6
herbie shell --seed 2019303
(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))))))