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)}\mathsf{hypot}\left(\left(\lambda_1 - \lambda_2\right) \cdot \left(\left(\sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)} \cdot \sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\right) \cdot \sqrt[3]{\cos \left(\frac{\phi_1 + \phi_2}{2}\right)}\right), \phi_1 - \phi_2\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r62209 = R;
double r62210 = lambda1;
double r62211 = lambda2;
double r62212 = r62210 - r62211;
double r62213 = phi1;
double r62214 = phi2;
double r62215 = r62213 + r62214;
double r62216 = 2.0;
double r62217 = r62215 / r62216;
double r62218 = cos(r62217);
double r62219 = r62212 * r62218;
double r62220 = r62219 * r62219;
double r62221 = r62213 - r62214;
double r62222 = r62221 * r62221;
double r62223 = r62220 + r62222;
double r62224 = sqrt(r62223);
double r62225 = r62209 * r62224;
return r62225;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r62226 = lambda1;
double r62227 = lambda2;
double r62228 = r62226 - r62227;
double r62229 = phi1;
double r62230 = phi2;
double r62231 = r62229 + r62230;
double r62232 = 2.0;
double r62233 = r62231 / r62232;
double r62234 = cos(r62233);
double r62235 = cbrt(r62234);
double r62236 = r62235 * r62235;
double r62237 = r62236 * r62235;
double r62238 = r62228 * r62237;
double r62239 = r62229 - r62230;
double r62240 = hypot(r62238, r62239);
double r62241 = R;
double r62242 = r62240 * r62241;
return r62242;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 39.1
Simplified3.8
rmApplied add-cube-cbrt4.0
Final simplification4.0
herbie shell --seed 2020057 +o rules:numerics
(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))))))