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(\left(\phi_1 + \phi_2\right) \cdot \frac{1}{2}\right), \phi_1 - \phi_2\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r2827108 = R;
double r2827109 = lambda1;
double r2827110 = lambda2;
double r2827111 = r2827109 - r2827110;
double r2827112 = phi1;
double r2827113 = phi2;
double r2827114 = r2827112 + r2827113;
double r2827115 = 2.0;
double r2827116 = r2827114 / r2827115;
double r2827117 = cos(r2827116);
double r2827118 = r2827111 * r2827117;
double r2827119 = r2827118 * r2827118;
double r2827120 = r2827112 - r2827113;
double r2827121 = r2827120 * r2827120;
double r2827122 = r2827119 + r2827121;
double r2827123 = sqrt(r2827122);
double r2827124 = r2827108 * r2827123;
return r2827124;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r2827125 = lambda1;
double r2827126 = lambda2;
double r2827127 = r2827125 - r2827126;
double r2827128 = phi1;
double r2827129 = phi2;
double r2827130 = r2827128 + r2827129;
double r2827131 = 0.5;
double r2827132 = r2827130 * r2827131;
double r2827133 = cos(r2827132);
double r2827134 = r2827127 * r2827133;
double r2827135 = r2827128 - r2827129;
double r2827136 = hypot(r2827134, r2827135);
double r2827137 = R;
double r2827138 = r2827136 * r2827137;
return r2827138;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 36.9
Simplified3.8
Taylor expanded around inf 3.8
Simplified3.8
Final simplification3.8
herbie shell --seed 2019152 +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))))))