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(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\frac{\phi_1 + \phi_2}{2}\right), \phi_1 - \phi_2\right)double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r101105 = R;
double r101106 = lambda1;
double r101107 = lambda2;
double r101108 = r101106 - r101107;
double r101109 = phi1;
double r101110 = phi2;
double r101111 = r101109 + r101110;
double r101112 = 2.0;
double r101113 = r101111 / r101112;
double r101114 = cos(r101113);
double r101115 = r101108 * r101114;
double r101116 = r101115 * r101115;
double r101117 = r101109 - r101110;
double r101118 = r101117 * r101117;
double r101119 = r101116 + r101118;
double r101120 = sqrt(r101119);
double r101121 = r101105 * r101120;
return r101121;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r101122 = R;
double r101123 = lambda1;
double r101124 = lambda2;
double r101125 = r101123 - r101124;
double r101126 = phi1;
double r101127 = phi2;
double r101128 = r101126 + r101127;
double r101129 = 2.0;
double r101130 = r101128 / r101129;
double r101131 = cos(r101130);
double r101132 = r101125 * r101131;
double r101133 = r101126 - r101127;
double r101134 = hypot(r101132, r101133);
double r101135 = r101122 * r101134;
return r101135;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 39.3
Simplified3.8
rmApplied *-commutative3.8
Final simplification3.8
herbie shell --seed 2020046 +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))))))