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)}R \cdot \mathsf{hypot}\left(\sqrt[3]{\left(\cos \left(\frac{\phi_2 + \phi_1}{2}\right) \cdot \cos \left(\frac{\phi_2 + \phi_1}{2}\right)\right) \cdot \cos \left(\frac{\phi_2 + \phi_1}{2}\right)} \cdot \left(\lambda_1 - \lambda_2\right), \phi_1 - \phi_2\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r1526142 = R;
double r1526143 = lambda1;
double r1526144 = lambda2;
double r1526145 = r1526143 - r1526144;
double r1526146 = phi1;
double r1526147 = phi2;
double r1526148 = r1526146 + r1526147;
double r1526149 = 2.0;
double r1526150 = r1526148 / r1526149;
double r1526151 = cos(r1526150);
double r1526152 = r1526145 * r1526151;
double r1526153 = r1526152 * r1526152;
double r1526154 = r1526146 - r1526147;
double r1526155 = r1526154 * r1526154;
double r1526156 = r1526153 + r1526155;
double r1526157 = sqrt(r1526156);
double r1526158 = r1526142 * r1526157;
return r1526158;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r1526159 = R;
double r1526160 = phi2;
double r1526161 = phi1;
double r1526162 = r1526160 + r1526161;
double r1526163 = 2.0;
double r1526164 = r1526162 / r1526163;
double r1526165 = cos(r1526164);
double r1526166 = r1526165 * r1526165;
double r1526167 = r1526166 * r1526165;
double r1526168 = cbrt(r1526167);
double r1526169 = lambda1;
double r1526170 = lambda2;
double r1526171 = r1526169 - r1526170;
double r1526172 = r1526168 * r1526171;
double r1526173 = r1526161 - r1526160;
double r1526174 = hypot(r1526172, r1526173);
double r1526175 = r1526159 * r1526174;
return r1526175;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 37.6
Simplified3.8
rmApplied add-cbrt-cube3.8
Final simplification3.8
herbie shell --seed 2019155 +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))))))