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 \cos \left(\frac{\phi_1 + \phi_2}{2}\right), \phi_1 - \phi_2\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r103244 = R;
double r103245 = lambda1;
double r103246 = lambda2;
double r103247 = r103245 - r103246;
double r103248 = phi1;
double r103249 = phi2;
double r103250 = r103248 + r103249;
double r103251 = 2.0;
double r103252 = r103250 / r103251;
double r103253 = cos(r103252);
double r103254 = r103247 * r103253;
double r103255 = r103254 * r103254;
double r103256 = r103248 - r103249;
double r103257 = r103256 * r103256;
double r103258 = r103255 + r103257;
double r103259 = sqrt(r103258);
double r103260 = r103244 * r103259;
return r103260;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r103261 = lambda1;
double r103262 = lambda2;
double r103263 = r103261 - r103262;
double r103264 = phi1;
double r103265 = phi2;
double r103266 = r103264 + r103265;
double r103267 = 2.0;
double r103268 = r103266 / r103267;
double r103269 = cos(r103268);
double r103270 = r103263 * r103269;
double r103271 = r103264 - r103265;
double r103272 = hypot(r103270, r103271);
double r103273 = R;
double r103274 = r103272 * r103273;
return r103274;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 38.1
Simplified3.4
Final simplification3.4
herbie shell --seed 2020056 +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))))))