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 r3453904 = R;
double r3453905 = lambda1;
double r3453906 = lambda2;
double r3453907 = r3453905 - r3453906;
double r3453908 = phi1;
double r3453909 = phi2;
double r3453910 = r3453908 + r3453909;
double r3453911 = 2.0;
double r3453912 = r3453910 / r3453911;
double r3453913 = cos(r3453912);
double r3453914 = r3453907 * r3453913;
double r3453915 = r3453914 * r3453914;
double r3453916 = r3453908 - r3453909;
double r3453917 = r3453916 * r3453916;
double r3453918 = r3453915 + r3453917;
double r3453919 = sqrt(r3453918);
double r3453920 = r3453904 * r3453919;
return r3453920;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r3453921 = lambda1;
double r3453922 = lambda2;
double r3453923 = r3453921 - r3453922;
double r3453924 = phi1;
double r3453925 = phi2;
double r3453926 = r3453924 + r3453925;
double r3453927 = 2.0;
double r3453928 = r3453926 / r3453927;
double r3453929 = cos(r3453928);
double r3453930 = r3453923 * r3453929;
double r3453931 = r3453924 - r3453925;
double r3453932 = hypot(r3453930, r3453931);
double r3453933 = R;
double r3453934 = r3453932 * r3453933;
return r3453934;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



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