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 r3576315 = R;
double r3576316 = lambda1;
double r3576317 = lambda2;
double r3576318 = r3576316 - r3576317;
double r3576319 = phi1;
double r3576320 = phi2;
double r3576321 = r3576319 + r3576320;
double r3576322 = 2.0;
double r3576323 = r3576321 / r3576322;
double r3576324 = cos(r3576323);
double r3576325 = r3576318 * r3576324;
double r3576326 = r3576325 * r3576325;
double r3576327 = r3576319 - r3576320;
double r3576328 = r3576327 * r3576327;
double r3576329 = r3576326 + r3576328;
double r3576330 = sqrt(r3576329);
double r3576331 = r3576315 * r3576330;
return r3576331;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r3576332 = lambda1;
double r3576333 = lambda2;
double r3576334 = r3576332 - r3576333;
double r3576335 = phi2;
double r3576336 = phi1;
double r3576337 = r3576335 + r3576336;
double r3576338 = 2.0;
double r3576339 = r3576337 / r3576338;
double r3576340 = cos(r3576339);
double r3576341 = r3576334 * r3576340;
double r3576342 = r3576336 - r3576335;
double r3576343 = hypot(r3576341, r3576342);
double r3576344 = R;
double r3576345 = r3576343 * r3576344;
return r3576345;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



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