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(\frac{\phi_2 + \phi_1}{2}\right), \phi_1 - \phi_2\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r3331089 = R;
double r3331090 = lambda1;
double r3331091 = lambda2;
double r3331092 = r3331090 - r3331091;
double r3331093 = phi1;
double r3331094 = phi2;
double r3331095 = r3331093 + r3331094;
double r3331096 = 2.0;
double r3331097 = r3331095 / r3331096;
double r3331098 = cos(r3331097);
double r3331099 = r3331092 * r3331098;
double r3331100 = r3331099 * r3331099;
double r3331101 = r3331093 - r3331094;
double r3331102 = r3331101 * r3331101;
double r3331103 = r3331100 + r3331102;
double r3331104 = sqrt(r3331103);
double r3331105 = r3331089 * r3331104;
return r3331105;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r3331106 = lambda1;
double r3331107 = lambda2;
double r3331108 = r3331106 - r3331107;
double r3331109 = phi2;
double r3331110 = phi1;
double r3331111 = r3331109 + r3331110;
double r3331112 = 2.0;
double r3331113 = r3331111 / r3331112;
double r3331114 = cos(r3331113);
double r3331115 = r3331108 * r3331114;
double r3331116 = r3331110 - r3331109;
double r3331117 = hypot(r3331115, r3331116);
double r3331118 = R;
double r3331119 = r3331117 * r3331118;
return r3331119;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 37.5
Simplified3.6
Final simplification3.6
herbie shell --seed 2019144 +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))))))