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 r2969903 = R;
double r2969904 = lambda1;
double r2969905 = lambda2;
double r2969906 = r2969904 - r2969905;
double r2969907 = phi1;
double r2969908 = phi2;
double r2969909 = r2969907 + r2969908;
double r2969910 = 2.0;
double r2969911 = r2969909 / r2969910;
double r2969912 = cos(r2969911);
double r2969913 = r2969906 * r2969912;
double r2969914 = r2969913 * r2969913;
double r2969915 = r2969907 - r2969908;
double r2969916 = r2969915 * r2969915;
double r2969917 = r2969914 + r2969916;
double r2969918 = sqrt(r2969917);
double r2969919 = r2969903 * r2969918;
return r2969919;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r2969920 = lambda1;
double r2969921 = lambda2;
double r2969922 = r2969920 - r2969921;
double r2969923 = phi2;
double r2969924 = phi1;
double r2969925 = r2969923 + r2969924;
double r2969926 = 2.0;
double r2969927 = r2969925 / r2969926;
double r2969928 = cos(r2969927);
double r2969929 = r2969922 * r2969928;
double r2969930 = r2969924 - r2969923;
double r2969931 = hypot(r2969929, r2969930);
double r2969932 = R;
double r2969933 = r2969931 * r2969932;
return r2969933;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 37.4
Simplified4.0
rmApplied *-un-lft-identity4.0
Applied associate-*r*4.0
Simplified4.0
Final simplification4.0
herbie shell --seed 2019163 +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))))))