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_1 + \phi_2}{2}\right), \phi_1 - \phi_2\right) \cdot Rdouble f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r75425 = R;
double r75426 = lambda1;
double r75427 = lambda2;
double r75428 = r75426 - r75427;
double r75429 = phi1;
double r75430 = phi2;
double r75431 = r75429 + r75430;
double r75432 = 2.0;
double r75433 = r75431 / r75432;
double r75434 = cos(r75433);
double r75435 = r75428 * r75434;
double r75436 = r75435 * r75435;
double r75437 = r75429 - r75430;
double r75438 = r75437 * r75437;
double r75439 = r75436 + r75438;
double r75440 = sqrt(r75439);
double r75441 = r75425 * r75440;
return r75441;
}
double f(double R, double lambda1, double lambda2, double phi1, double phi2) {
double r75442 = lambda1;
double r75443 = lambda2;
double r75444 = r75442 - r75443;
double r75445 = phi1;
double r75446 = phi2;
double r75447 = r75445 + r75446;
double r75448 = 2.0;
double r75449 = r75447 / r75448;
double r75450 = cos(r75449);
double r75451 = r75444 * r75450;
double r75452 = r75445 - r75446;
double r75453 = hypot(r75451, r75452);
double r75454 = R;
double r75455 = r75453 * r75454;
return r75455;
}



Bits error versus R



Bits error versus lambda1



Bits error versus lambda2



Bits error versus phi1



Bits error versus phi2
Results
Initial program 38.4
Simplified3.7
rmApplied pow13.7
Applied pow13.7
Applied pow-prod-down3.7
Final simplification3.7
herbie shell --seed 2019350 +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))))))