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 r69854 = R;
double r69855 = lambda1;
double r69856 = lambda2;
double r69857 = r69855 - r69856;
double r69858 = phi1;
double r69859 = phi2;
double r69860 = r69858 + r69859;
double r69861 = 2.0;
double r69862 = r69860 / r69861;
double r69863 = cos(r69862);
double r69864 = r69857 * r69863;
double r69865 = r69864 * r69864;
double r69866 = r69858 - r69859;
double r69867 = r69866 * r69866;
double r69868 = r69865 + r69867;
double r69869 = sqrt(r69868);
double r69870 = r69854 * r69869;
return r69870;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r69871 = lambda1;
double r69872 = lambda2;
double r69873 = r69871 - r69872;
double r69874 = phi1;
double r69875 = phi2;
double r69876 = r69874 + r69875;
double r69877 = 2.0;
double r69878 = r69876 / r69877;
double r69879 = cos(r69878);
double r69880 = r69873 * r69879;
double r69881 = r69874 - r69875;
double r69882 = hypot(r69880, r69881);
double r69883 = R;
double r69884 = r69882 * r69883;
return r69884;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 38.9
Simplified4.0
rmApplied pow14.0
Applied pow14.0
Applied pow-prod-down4.0
Final simplification4.0
herbie shell --seed 2019212 +o rules:numerics
(FPCore (R lambda1 lambda2 phi1 phi2)
:name "Equirectangular approximation to distance on a great circle"
:precision binary64
(* R (sqrt (+ (* (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2))) (* (- lambda1 lambda2) (cos (/ (+ phi1 phi2) 2)))) (* (- phi1 phi2) (- phi1 phi2))))))