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(\left(\lambda_1 - \lambda_2\right) \cdot \cos \left(\left(\phi_1 + \phi_2\right) \cdot \frac{1}{2}\right)\right), \left(\phi_1 - \phi_2\right)\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r16543428 = R;
double r16543429 = lambda1;
double r16543430 = lambda2;
double r16543431 = r16543429 - r16543430;
double r16543432 = phi1;
double r16543433 = phi2;
double r16543434 = r16543432 + r16543433;
double r16543435 = 2.0;
double r16543436 = r16543434 / r16543435;
double r16543437 = cos(r16543436);
double r16543438 = r16543431 * r16543437;
double r16543439 = r16543438 * r16543438;
double r16543440 = r16543432 - r16543433;
double r16543441 = r16543440 * r16543440;
double r16543442 = r16543439 + r16543441;
double r16543443 = sqrt(r16543442);
double r16543444 = r16543428 * r16543443;
return r16543444;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r16543445 = lambda1;
double r16543446 = lambda2;
double r16543447 = r16543445 - r16543446;
double r16543448 = phi1;
double r16543449 = phi2;
double r16543450 = r16543448 + r16543449;
double r16543451 = 0.5;
double r16543452 = r16543450 * r16543451;
double r16543453 = cos(r16543452);
double r16543454 = r16543447 * r16543453;
double r16543455 = r16543448 - r16543449;
double r16543456 = hypot(r16543454, r16543455);
double r16543457 = R;
double r16543458 = r16543456 * r16543457;
return r16543458;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 37.1
Simplified4.1
Taylor expanded around -inf 4.1
Simplified4.1
Final simplification4.1
herbie shell --seed 2019128 +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))))))