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 r3977351 = R;
double r3977352 = lambda1;
double r3977353 = lambda2;
double r3977354 = r3977352 - r3977353;
double r3977355 = phi1;
double r3977356 = phi2;
double r3977357 = r3977355 + r3977356;
double r3977358 = 2.0;
double r3977359 = r3977357 / r3977358;
double r3977360 = cos(r3977359);
double r3977361 = r3977354 * r3977360;
double r3977362 = r3977361 * r3977361;
double r3977363 = r3977355 - r3977356;
double r3977364 = r3977363 * r3977363;
double r3977365 = r3977362 + r3977364;
double r3977366 = sqrt(r3977365);
double r3977367 = r3977351 * r3977366;
return r3977367;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r3977368 = lambda1;
double r3977369 = lambda2;
double r3977370 = r3977368 - r3977369;
double r3977371 = phi2;
double r3977372 = phi1;
double r3977373 = r3977371 + r3977372;
double r3977374 = 2.0;
double r3977375 = r3977373 / r3977374;
double r3977376 = cos(r3977375);
double r3977377 = r3977370 * r3977376;
double r3977378 = r3977372 - r3977371;
double r3977379 = hypot(r3977377, r3977378);
double r3977380 = R;
double r3977381 = r3977379 * r3977380;
return r3977381;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 39.3
Simplified3.8
rmApplied *-un-lft-identity3.8
Applied associate-*r*3.8
Simplified3.8
Final simplification3.8
herbie shell --seed 2019169 +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))))))