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 \left(1 \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right)\right), \phi_1 - \phi_2\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r77069 = R;
double r77070 = lambda1;
double r77071 = lambda2;
double r77072 = r77070 - r77071;
double r77073 = phi1;
double r77074 = phi2;
double r77075 = r77073 + r77074;
double r77076 = 2.0;
double r77077 = r77075 / r77076;
double r77078 = cos(r77077);
double r77079 = r77072 * r77078;
double r77080 = r77079 * r77079;
double r77081 = r77073 - r77074;
double r77082 = r77081 * r77081;
double r77083 = r77080 + r77082;
double r77084 = sqrt(r77083);
double r77085 = r77069 * r77084;
return r77085;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r77086 = lambda1;
double r77087 = lambda2;
double r77088 = r77086 - r77087;
double r77089 = 1.0;
double r77090 = phi1;
double r77091 = phi2;
double r77092 = r77090 + r77091;
double r77093 = 2.0;
double r77094 = r77092 / r77093;
double r77095 = cos(r77094);
double r77096 = r77089 * r77095;
double r77097 = r77088 * r77096;
double r77098 = r77090 - r77091;
double r77099 = hypot(r77097, r77098);
double r77100 = R;
double r77101 = r77099 * r77100;
return r77101;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 39.1
Simplified3.6
rmApplied *-un-lft-identity3.6
Final simplification3.6
herbie shell --seed 2019353 +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))))))