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 r1339336 = R;
double r1339337 = lambda1;
double r1339338 = lambda2;
double r1339339 = r1339337 - r1339338;
double r1339340 = phi1;
double r1339341 = phi2;
double r1339342 = r1339340 + r1339341;
double r1339343 = 2.0;
double r1339344 = r1339342 / r1339343;
double r1339345 = cos(r1339344);
double r1339346 = r1339339 * r1339345;
double r1339347 = r1339346 * r1339346;
double r1339348 = r1339340 - r1339341;
double r1339349 = r1339348 * r1339348;
double r1339350 = r1339347 + r1339349;
double r1339351 = sqrt(r1339350);
double r1339352 = r1339336 * r1339351;
return r1339352;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r1339353 = lambda1;
double r1339354 = lambda2;
double r1339355 = r1339353 - r1339354;
double r1339356 = phi2;
double r1339357 = phi1;
double r1339358 = r1339356 + r1339357;
double r1339359 = 2.0;
double r1339360 = r1339358 / r1339359;
double r1339361 = cos(r1339360);
double r1339362 = r1339355 * r1339361;
double r1339363 = r1339357 - r1339356;
double r1339364 = hypot(r1339362, r1339363);
double r1339365 = R;
double r1339366 = r1339364 * r1339365;
return r1339366;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



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