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_2 + \phi_1}{2}\right), \phi_1 - \phi_2\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r3204324 = R;
double r3204325 = lambda1;
double r3204326 = lambda2;
double r3204327 = r3204325 - r3204326;
double r3204328 = phi1;
double r3204329 = phi2;
double r3204330 = r3204328 + r3204329;
double r3204331 = 2.0;
double r3204332 = r3204330 / r3204331;
double r3204333 = cos(r3204332);
double r3204334 = r3204327 * r3204333;
double r3204335 = r3204334 * r3204334;
double r3204336 = r3204328 - r3204329;
double r3204337 = r3204336 * r3204336;
double r3204338 = r3204335 + r3204337;
double r3204339 = sqrt(r3204338);
double r3204340 = r3204324 * r3204339;
return r3204340;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r3204341 = lambda1;
double r3204342 = lambda2;
double r3204343 = r3204341 - r3204342;
double r3204344 = phi2;
double r3204345 = phi1;
double r3204346 = r3204344 + r3204345;
double r3204347 = 2.0;
double r3204348 = r3204346 / r3204347;
double r3204349 = cos(r3204348);
double r3204350 = r3204343 * r3204349;
double r3204351 = r3204345 - r3204344;
double r3204352 = hypot(r3204350, r3204351);
double r3204353 = R;
double r3204354 = r3204352 * r3204353;
return r3204354;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 38.9
Simplified3.7
Final simplification3.7
herbie shell --seed 2019192 +o rules:numerics
(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))))))