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 2.511829003669043 \cdot 10^{+124}:\\
\;\;\;\;\sqrt{\left(\cos \left(\frac{\phi_2 + \phi_1}{2}\right) \cdot \left(\lambda_1 - \lambda_2\right)\right) \cdot \left(\sqrt[3]{\cos \left(\frac{\phi_2 + \phi_1}{2}\right) \cdot \left(\cos \left(\frac{\phi_2 + \phi_1}{2}\right) \cdot \cos \left(\frac{\phi_2 + \phi_1}{2}\right)\right)} \cdot \left(\lambda_1 - \lambda_2\right)\right) + \left(\phi_1 - \phi_2\right) \cdot \left(\phi_1 - \phi_2\right)} \cdot R\\
\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 r4682149 = R;
double r4682150 = lambda1;
double r4682151 = lambda2;
double r4682152 = r4682150 - r4682151;
double r4682153 = phi1;
double r4682154 = phi2;
double r4682155 = r4682153 + r4682154;
double r4682156 = 2.0;
double r4682157 = r4682155 / r4682156;
double r4682158 = cos(r4682157);
double r4682159 = r4682152 * r4682158;
double r4682160 = r4682159 * r4682159;
double r4682161 = r4682153 - r4682154;
double r4682162 = r4682161 * r4682161;
double r4682163 = r4682160 + r4682162;
double r4682164 = sqrt(r4682163);
double r4682165 = r4682149 * r4682164;
return r4682165;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r4682166 = phi2;
double r4682167 = 2.511829003669043e+124;
bool r4682168 = r4682166 <= r4682167;
double r4682169 = phi1;
double r4682170 = r4682166 + r4682169;
double r4682171 = 2.0;
double r4682172 = r4682170 / r4682171;
double r4682173 = cos(r4682172);
double r4682174 = lambda1;
double r4682175 = lambda2;
double r4682176 = r4682174 - r4682175;
double r4682177 = r4682173 * r4682176;
double r4682178 = r4682173 * r4682173;
double r4682179 = r4682173 * r4682178;
double r4682180 = cbrt(r4682179);
double r4682181 = r4682180 * r4682176;
double r4682182 = r4682177 * r4682181;
double r4682183 = r4682169 - r4682166;
double r4682184 = r4682183 * r4682183;
double r4682185 = r4682182 + r4682184;
double r4682186 = sqrt(r4682185);
double r4682187 = R;
double r4682188 = r4682186 * r4682187;
double r4682189 = r4682166 - r4682169;
double r4682190 = r4682187 * r4682189;
double r4682191 = r4682168 ? r4682188 : r4682190;
return r4682191;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
if phi2 < 2.511829003669043e+124Initial program 34.3
rmApplied add-cbrt-cube34.3
if 2.511829003669043e+124 < phi2 Initial program 56.1
Taylor expanded around 0 18.9
Final simplification32.2
herbie shell --seed 2019168
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Equirectangular approximation to distance on a great circle"
(* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))))