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 r2463627 = R;
double r2463628 = lambda1;
double r2463629 = lambda2;
double r2463630 = r2463628 - r2463629;
double r2463631 = phi1;
double r2463632 = phi2;
double r2463633 = r2463631 + r2463632;
double r2463634 = 2.0;
double r2463635 = r2463633 / r2463634;
double r2463636 = cos(r2463635);
double r2463637 = r2463630 * r2463636;
double r2463638 = r2463637 * r2463637;
double r2463639 = r2463631 - r2463632;
double r2463640 = r2463639 * r2463639;
double r2463641 = r2463638 + r2463640;
double r2463642 = sqrt(r2463641);
double r2463643 = r2463627 * r2463642;
return r2463643;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r2463644 = lambda1;
double r2463645 = lambda2;
double r2463646 = r2463644 - r2463645;
double r2463647 = phi1;
double r2463648 = phi2;
double r2463649 = r2463647 + r2463648;
double r2463650 = 0.5;
double r2463651 = r2463649 * r2463650;
double r2463652 = cos(r2463651);
double r2463653 = r2463646 * r2463652;
double r2463654 = r2463647 - r2463648;
double r2463655 = hypot(r2463653, r2463654);
double r2463656 = R;
double r2463657 = r2463655 * r2463656;
return r2463657;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 37.4
Simplified3.6
Taylor expanded around inf 3.6
Simplified3.6
Final simplification3.6
herbie shell --seed 2019151 +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))))))