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 r3552999 = R;
double r3553000 = lambda1;
double r3553001 = lambda2;
double r3553002 = r3553000 - r3553001;
double r3553003 = phi1;
double r3553004 = phi2;
double r3553005 = r3553003 + r3553004;
double r3553006 = 2.0;
double r3553007 = r3553005 / r3553006;
double r3553008 = cos(r3553007);
double r3553009 = r3553002 * r3553008;
double r3553010 = r3553009 * r3553009;
double r3553011 = r3553003 - r3553004;
double r3553012 = r3553011 * r3553011;
double r3553013 = r3553010 + r3553012;
double r3553014 = sqrt(r3553013);
double r3553015 = r3552999 * r3553014;
return r3553015;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r3553016 = lambda1;
double r3553017 = lambda2;
double r3553018 = r3553016 - r3553017;
double r3553019 = phi1;
double r3553020 = phi2;
double r3553021 = r3553019 + r3553020;
double r3553022 = 2.0;
double r3553023 = r3553021 / r3553022;
double r3553024 = cos(r3553023);
double r3553025 = r3553018 * r3553024;
double r3553026 = r3553019 - r3553020;
double r3553027 = hypot(r3553025, r3553026);
double r3553028 = R;
double r3553029 = r3553027 * r3553028;
return r3553029;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 36.5
Simplified3.7
rmApplied *-un-lft-identity3.7
Applied associate-*r*3.7
Simplified3.7
Final simplification3.7
herbie shell --seed 2019162 +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))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))))